<summary><strong>Leer AWS-hacking van nul tot held met</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Werk jy in 'n **cybersecurity-maatskappy**? Wil jy jou **maatskappy adverteer in HackTricks**? Of wil jy toegang hê tot die **nuutste weergawe van die PEASS of laai HackTricks in PDF af**? Kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Sluit aan by die** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** my op **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou hacking-truuks deur PR's in te dien by die** [**hacktricks-repo**](https://github.com/carlospolop/hacktricks) **en** [**hacktricks-cloud-repo**](https://github.com/carlospolop/hacktricks-cloud).
Hierdie koppe word gebruik om aan te dui **hoe om 'n binêre lêer in die geheue te laai.**\
Elke **LOAD**-kop dui 'n gebied van **geheue** aan (grootte, toestemmings en belyning) en dui die bytes van die ELF **binêre lêer aan om daar te kopieer**.
Byvoorbeeld, die tweede een het 'n grootte van 0x1190, moet geleë wees by 0x1fc48 met lees- en skryftoestemmings en sal gevul word met 0x528 vanaf die offset 0xfc48 (dit vul nie die hele voorbehoue spasie nie). Hierdie geheue sal die afdelings `.init_array .fini_array .dynamic .got .data .bss` bevat.
Bevat die konfigurasie van die stapeluitvoeringsvoorkomingverdediging. As dit geaktiveer is, sal die binêre lêer nie in staat wees om kode van die stapel uit te voer nie.
Dui die RELRO (Relocation Read-Only) konfigurasie van die binêre lêer aan. Hierdie beskerming sal sekere afdelings van die geheue (soos die `GOT` of die `init` en `fini`-tabelle) as skryfbeskerming merk nadat die program gelaai is en voordat dit begin loop.
In die vorige voorbeeld kopieer dit 0x3b8 bytes na 0x1fc48 as skryfbeskerming wat die afdelings `.init_array .fini_array .dynamic .got .data .bss` affekteer.
Let daarop dat RELRO gedeeltelik of volledig kan wees, die gedeeltelike weergawe beskerm nie die afdeling **`.plt.got`** nie, wat vir **lui binding** gebruik word en hierdie geheue-ruimte moet **skryftoestemmings** hê om die adres van die biblioteke die eerste keer wat hul ligging gesoek word, te skryf.
* **Stringtabel**: Dit bevat al die strings wat deur die ELF-lêer benodig word (maar nie die een wat werklik deur die program gebruik word nie). Byvoorbeeld, dit bevat afdelingsname soos `.text` of `.data`. En as `.text` by offset 45 in die stringtabel is, sal dit die nommer **45** in die **naam**-veld gebruik.
* Om te vind waar die stringtabel is, bevat die ELF 'n verwysing na die stringtabel.
* **Simbooltabel**: Dit bevat inligting oor die simbole soos die naam (offset in die stringtabel), adres, grootte en meer metadata oor die simbool.
* **`.text`**: Die instruksies van die program om uit te voer.
* **`.data`**: Globale veranderlikes met 'n gedefinieerde waarde in die program.
* **`.bss`**: Globale veranderlikes wat nie geïnisialiseer is nie (of geïnisialiseer na nul). Veranderlikes hier word outomaties geïnisialiseer na nul om sodoende nuttelose nulle te voorkom wat by die binêre lêer gevoeg word.
* **Bindende eienskappe** (swak, plaaslik of globaal): 'n Plaaslike simbool kan slegs deur die program self benader word, terwyl die globale simbool buite die program gedeel word. 'n Swak objek is byvoorbeeld 'n funksie wat deur 'n ander een oorskryf kan word.
* **Tipe**: NOTYPE (geen tipe gespesifiseer), OBJECT (globale data var), FUNC (funksie), SECTION (afdeling), FILE (bronkode-lêer vir afbrekers), TLS (draadplaaslike veranderlike), GNU\_IFUNC (indirekte funksie vir herlokalisering)
Die NEEDED-gids dui daarop dat die program **die genoemde biblioteek moet laai** om voort te gaan. Die NEEDED-gids is voltooi sodra die gedeelde **biblioteek volledig funksioneel en gereed** vir gebruik is.
Die laaier moet ook afhanklikhede herlokaliseer nadat hulle gelaai is. Hierdie herlokasies word aangedui in die herlokasie-tabel in die REL- of RELA-formaat, en die aantal herlokasies word gegee in die dinamiese afdelings RELSZ of RELASZ.
As die program in 'n ander plek as die voorkeuradres (gewoonlik 0x400000) gelaai word omdat die adres reeds gebruik word of as gevolg van ASLR of enige ander rede, herstel 'n statiese herlokalisering die wysers wat waardes verwag het dat die binêre lêer in die voorkeuradres gelaai sou word.
Die herlokalisering kan ook verwys na 'n eksterne simbool (soos 'n funksie van 'n afhanklikheid). Byvoorbeeld die funksie malloc van libC. Dan sal die laaier wanneer libC gelaai word, die adres waar die malloc-funksie gelaai is, in die GOT (Global Offset Table) tabel skryf (aangedui in die herlokaliseringstabel) waar die adres van malloc gespesifiseer moet word.
Die PLT-afdeling maak dit moontlik om lui koppeling uit te voer, wat beteken dat die oplossing van die ligging van 'n funksie die eerste keer uitgevoer word wanneer dit benader word.
Dus, wanneer 'n program na malloc roep, roep dit eintlik die ooreenstemmende ligging van `malloc` in die PLT (`malloc@plt`) aan. Die eerste keer wat dit geroep word, los dit die adres van `malloc` op en stoor dit sodat die volgende keer as `malloc` geroep word, daardie adres gebruik word in plaas van die PLT-kode.
Nadat die program gelaai is, is dit tyd vir dit om uitgevoer te word. Dit is egter nie altyd die `main`-funksie wat eerste uitgevoer word nie. Dit is omdat byvoorbeeld in C++ as 'n globale veranderlike 'n voorwerp van 'n klas is, hierdie voorwerp **voor** die uitvoering van die `main`-funksie geïnisialiseer moet word, soos in:
Let wel dat hierdie globale veranderlikes in `.data` of `.bss` geleë is, maar in die lys `__CTOR_LIST__` en `__DTOR_LIST__` word die voorwerpe om te inisialiseer en te vernietig gestoor om hulle te kan opspoor.
Vanuit 'n samestellerperspektief is dit moontlik om hierdie aksies voor en na die `main`-funksie uitgevoer word, 'n `init`-funksie en 'n `fini`-funksie te skep wat in die dinamiese afdeling as **`INIT`** en **`FIN`** verwys word en in die `init`- en `fini`-afdelings van die ELF geplaas word.
Die ander opsie, soos genoem, is om die lys **`__CTOR_LIST__`** en **`__DTOR_LIST__`** te verwys in die **`INIT_ARRAY`**- en **`FINI_ARRAY`**-inskrywings in die dinamiese afdeling, en die lengte van hierdie word aangedui deur **`INIT_ARRAYSZ`** en **`FINI_ARRAYSZ`**. Elke inskrywing is 'n funksie-aanwys wat sonder argumente geroep sal word.
1. Die program word in die geheue gelaai, statiese globale veranderlikes word geïnisialiseer in **`.data`** en ongeïnisialiseerde veranderlikes word in **`.bss`** genul.
2. Alle **afhanklikhede** vir die program of biblioteke word **geïnisialiseer** en die **dinamiese skakeling** word uitgevoer.
3.**`PREINIT_ARRAY`**-funksies word uitgevoer.
4.**`INIT_ARRAY`**-funksies word uitgevoer.
5. As daar 'n **`INIT`**-inskrywing is, word dit geroep.
6. As 'n biblioteek, eindig dlopen hier, as 'n program, is dit tyd om die **werklike ingangspunt** (`main`-funksie) te roep.
Wanneer dit gebruik word, word die afdelings **`.tdata`** en **`.tbss`** in die ELF gebruik. Dit is soos `.data` (geïnisialiseer) en `.bss` (nie geïnisialiseer) maar vir TLS.
Elke veranderlike sal 'n inskrywing in die TLS-kop hê wat die grootte en die TLS-offset spesifiseer, wat die offset is wat dit in die draad se plaaslike data-gebied sal gebruik.
Die `__TLS_MODULE_BASE` is 'n simbool wat gebruik word om na die basisadres van die draadlokale berging te verwys en wys na die area in die geheue wat al die draadlokale data van 'n module bevat.
<summary><strong>Leer AWS-hacking van nul tot held met</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Werk jy in 'n **cyberveiligheidsmaatskappy**? Wil jy jou **maatskappy adverteer in HackTricks**? Of wil jy toegang hê tot die **nuutste weergawe van die PEASS of HackTricks aflaai in PDF-formaat**? Kyk na die [**SUBSKRIPSIEPLANNE**](https://github.com/sponsors/carlospolop)!
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* Kry die [**amptelike PEASS & HackTricks-uitrusting**](https://peass.creator-spring.com)
* **Sluit aan by die** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegramgroep**](https://t.me/peass) of **volg** my op **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**hacktricks-repo**](https://github.com/carlospolop/hacktricks) **en** [**hacktricks-cloud-repo**](https://github.com/carlospolop/hacktricks-cloud).