--- title: x86 ASM date: 2018-10-15 --- # x86 ASM ## Outline * 32 bit System ## Syntax ### Intel Syntax (verwendet in Vorlesung) * Intel Syntax (Ziel Operant ist immer links) * Adressen in `[1234]` ### AT&T Syntax * Ziel Operant ist rechts * Register mit `%` * Number Literals mit `$` ## Memory Layout * `.bss` global uninitialized variables * `.data` global initialized variables * heap: dynamic variables * `.text`: code (usually read-only) * stack: lokale Variablen + procedure activation records * heap grows up * stack grows down ### Stack Frame * **ESP**: Ende des Stacks * **EBP**: Begin des aktuellen Stack Frames Enthält: * Lokale Variablen * Parameter * Caller Adresse | :---: | | | | --- | | Parameters | | :---: | | Return address | | :---: | | prev frame address (alter *EBP*) | | :---: | | *EBP* -> | | :---: | | Local variables | | :---: | | *ESP* -> | | :---: | | | | :---: | ### MOV * `mov eax, ebx`: `eax = ebx` * `mov edx, [1234]`: `edx = *1234` ### `PUSH` * `push ecx`: Wert von `ecx` auf den Stack, `esp - 4` * `pop esi`: `esp + 4` ### `RET` * `pop eip` ### Subroutinen `f(1,2,3)` -> ``` push 3 push 2 push 1 call f ```