Zupełnie out-of-order nagrałem dodatkową miniserię podcastów (a w zasadzie videocastów) o pointerach (wskaźnikach) w C/C++. Seria trwa łącznie ponad 4 godziny i jest rozbita na 8 odcinków, w których staram się pokazać/wytłumaczyć czym jest pointer (adres+metadane), jakie narzędzia na poziomie składni udostępnia język do operowania na pointerach, jak i po co castować pointery (jest i krótka dygresja o strict aliasing rule), po co ich używać, a także jak napisać programik który wylistuje regiony pamięci używane przez aplikację.
Lista odcinków:
Pointery #1 (30 min) - Odcinek pierwszy, w którym staram się wytłumaczyć czym jest adres i pamięć procesu.
Pointery #2 (54 min) - Odcinek drugi, w którym omawiam składnie pointerów.
Pointery #3 (21 min) - Odcinek trzeci o arytmetyce na pointerach (ważne) i castowaniu.
Pointery #4 (26 min) - Odcinek czwarty o castowaniu, void*, "stringach", etc.
Pointery #5 (28 min) - Odcinek piąty o dostępie do "surowego" zapisu danej zmiennej (float'a) w pamięci, oraz o tym dlaczego struktury są wyrównywane (i o operacjach atomowych i nie-atomowych na zmiennych).
Pointery #6 (33 min) - Odcinek szósty o alokacji i uwalnianiu pamięci w C i C++, a także o popularnych błędach z tym związanych, oraz o operowaniu na blokach pamięci (memset, memcpy, memove, memcmp).
Pointery #7 (22 min) - Odcinek siódmy, w którym wspominam o pointerach w strukturach danych, o tym jak ich używać (składniowo), oraz o tym, że nie powinno się zapisywać pointerów do pliku (zamiast tego zapisuje się indeksy, offsety, czy identyfikatory).
Pointery #8 (36 min) - Odcinek ostatni, w którym pokazuje jak napisać program listujący zaalokowane (i wolne) regiony pamięci w kontekscie naszego procesu.
UPDATE: Pointery #9 (31 min) - Odcinek uzupełniający, w którym pokazuje cztery metody alokacji dynamicznej tablic 2D, oraz o tym jak takowe tablice przekazać do funkcji (i jakie dane należy przekazać razem z nimi).
Dodatkowo, osoby zainteresowane zachęcam do obejrzenia odcinku ReverseCraft o tym co znajduje się w pamięci procesu:
ReverseCraft #3 - Pamięć, proces i PE (32 min) - Trzeci odcinek kursu, w którym omawiam wirtualną przestrzeń procesu, mechanizmy nią kierujące, oraz co się w niej znajduje. Dodatkowo wspominam o mechaniźmie wczytywania pliku PE (czy to modułu (biblioteki) DLL czy modułu EXE) do pamięci procesu. Materiały uzupełniające.
Oraz zachęcam do rzucenia okiem na przykładową implementacje struktury danych (aka wykorzystanie pointerów w praktyce):
Code #3 - linked list: dodawanie, przechodzenie (13 min) - Jednokierunkowa linked lista: co to, dodawanie elementów, przechodzenie listy.
Code #4 - linked list: usuwanie elementu (12 min) - Jednokierunkowa linked lista: usuwanie elementu.
Code #5 - linked list: API, iteratory (10 min) - Jednokierunkowa linked lista: tworzenie API do przechodzenia tablicy, część 1 z 3: iteratory.
Code #6 - linked list: API, zrzut do tablicy (14 min) - Jednokierunkowa linked lista: tworzenie API do przechodzenia tablicy, część 2 z 3: zrzut do tablicy (arraya), zarówno alokowanej dynamicznie, jak i dostarczonej przez usera.
Code #7 - linked list: API, callback (8 min) - Jednokierunkowa linked lista: tworzenie API do przechodzenia tablicy, część 3 z 3: callback do funkcji podanej przez usera.
Dodatkowe, mniej związane, materiały:
FAQ #3 - Asmloader internals (16 min) - Czyli o tym jak działa asmloader od wewnątrz.
Zachęcam również do przejrzenia źródeł HiperDrop.
GG.
Sections
- lang: |
- RSS: |
- About me
- Tools
- → YT YouTube (EN)
- → D Discord
- → M Mastodon
- → T Twitter
- → GH GitHub
Links / Blogs
- → dragonsector.pl
- → vexillium.org
- Security/Hacking:
- Reverse Eng./Low-Level:
- Programming/Code:
Posts
- Paged Out! #5 is out,
- CVEs of SSH talk this Thursday,
- Debug Log: Internet doesn't work (it was the PSU),
- FAQ: The tragedy of low-level exploitation,
- Solving Hx8 Teaser 2 highlight videos!,
- Gynvael on SECURITYbreak podcast,
- Paged Out! #4 is out,
- I won't be able to attend CONFidence'24 after all :(,
- xz/liblzma: Bash-stage Obfuscation Explained,
- Two of my bookmarklets: image extraction and simple TTS,
- → see all posts on main page
// copyright © Gynvael Coldwind
// design & art by Xa
// logo font (birdman regular) by utopiafonts / Dale Harris
/* the author and owner of this blog hereby allows anyone to test the security of this blog (on HTTP level only, the server is not mine, so let's leave it alone ;>), and try to break in (including successful breaks) without any consequences of any kind (DoS attacks are an exception here) ... I'll add that I planted in some places funny photos of some kittens, there are 7 of them right now, so have fun looking for them ;> let me know if You find them all, I'll add some congratz message or sth ;> */
Vulns found in blog:
* XSS (pers, user-inter) by ged_
* XSS (non-pers) by Anno & Tracerout
* XSS (pers) by Anno & Tracerout
* Blind SQLI by Sławomir Błażek
* XSS (pers) by Sławomir Błażek
// design & art by Xa
// logo font (birdman regular) by utopiafonts / Dale Harris
/* the author and owner of this blog hereby allows anyone to test the security of this blog (on HTTP level only, the server is not mine, so let's leave it alone ;>), and try to break in (including successful breaks) without any consequences of any kind (DoS attacks are an exception here) ... I'll add that I planted in some places funny photos of some kittens, there are 7 of them right now, so have fun looking for them ;> let me know if You find them all, I'll add some congratz message or sth ;> */
Vulns found in blog:
* XSS (pers, user-inter) by ged_
* XSS (non-pers) by Anno & Tracerout
* XSS (pers) by Anno & Tracerout
* Blind SQLI by Sławomir Błażek
* XSS (pers) by Sławomir Błażek
Comments:
Naprawdę, dobra robota, jak zwykle ;) .
Wracają do tematu, rewelacyjne wykłady.
Mi się wydaje, że Gynvael napisał program kopiujący go do kompa.
W ten sposób on ma czas jeść, spać, czy przebywać z dziewczyną¹ i jednocześnie robić to wszytko co robi.
¹Która dziewczyna pozwala na siedzenie przed kompem całymi dniami?
Myślę, że to ona podsunęła pomysł kopii.
A może to po prostu stara dobra bilokacja?
Widac to kwestia punktu widzenia. Mi osobiscie sie wydaje, ze sporo czasu marnuje i moglbym jednak wiecej rzeczy robic. Hehe, niemniej jednak ciesze sie, ze z Waszego punktu widzenia nie wyglada to tak zle jak z mojego :D
Btw, nie dziewczyna, zona :)
@olo16
:D
Fajnie że trzymasz tempo podcastów i postów Gyn, jest co czytać ;) Szkoda tylko że ostatnio mało się pojawia twoich "gazetkowych" publikacji. Ad seria podcastów : heh, what can I say, keep the fire burnig (jak to kiedyś "znajomy" mi powiedział ;D ) Gw !
PS : To others : Gyn ma swojego klona, ale cii, żeby się nie dowiedział że o tym wspomniałem (Gynvael nie widzi tej wiadomości ;D )
[code]memcpy(d, (void*)s, 4);[/code]
należy zastąpić następującą wersją
[code]memcpy(d, &s, 4);[code]
lub na siłę
[code]memcpy(d, (void*)&s, 4);[/code]
w przypadku gdy s nie jest wskaźnikiem a zwykłym obiektem jakiegoś typu ;-)
Add a comment: