emile.space r2wa.rs
tag: ctf, resource

1. assembly basics

1.1. memory

1.1.1. ram

0xffff ffff ffff ffff

Memory can be addressed using some number:

0x00000000000000000000
...
*memory*
...
0xffffffffffffffffffff

1.1.2. binary

Somewhere in memory lies the binary:

0x??? .text
initialized data
.bss
heap
|
v
...

>

...
^
|
stack
cmd line args
0x???

1.1.3. function frames

On the stack:

...
locals |
base pointer | line function
ret addr |
parameters |
locals |
base pointer | rectangle function
ret addr |
parameters |

1.2. registers

1.2.1. sizes

64 | 32 | 16 | 8 | 0 |
v v v v v
rax: ................................................................
eax: ................................
ax: ................
ah ........
al ........

r?x: 64 bit e?x: 32 bit ?x: 16 bit ?h: "high" 8 bit ?l: "low" 8 bit

1.2.2. common x86 registers

1.3. stack

1.3.1. push

Stack: ___ ___ ___

>

push "a"

>

Stack: _a_ ___ ___

>

push "b"

>

Stack: _a_ _b_ ___

>

push "c"

>

Stack: _a_ _b_ _c_

1.3.2. pop

Stack: _a_ _b_ _c_
rax: ___
rbx: ___
rcx: ___

>

pop "rax"

>

Stack: _a_ _b_ ___
rax: _c_
rbx: ___
rcx: ___

>

pop "rbx"

>

Stack: _a_ ___ ___
rax: _c_
rbx: _b_
rcx: ___

>

pop "rcx"

>

Stack: ___ ___ ___
rax: _c_
rbx: _b_
rcx: _a_

1.4. syntax

1.4.1. intel

mov rax, rbx

1.4.2. AT&T

mov %rax, %rbx

1.5. Instruction

1.5.1. mov

mov dst, src

values in square brackets dereference pointers, so the following:

mov rbx, [rax]

sould move the value the pointer that is stored in rax points to into rbx.

1.5.2. sub / add

subtrace or add to the provided value

sub rax, 0x100
add rdx, [rax]

1.5.3. ret

1.5.4. leave

1.5.5. call

1.5.6. jmp

jne: jump if not equal jnz: jump if not zero

1.6. Functions

1.6.1. prolog

push rip
push rbp
mov rbp, rsp

1.6.2. epilog

mov rsp, rbp
pop rbp
pop rip

1.7. Buffer

char str[16];
_ _ _ _
_ _ _ _
_ _ _ _
_ _ _ _
^
| stack grows up
| buffer get's written in the other dir
v
gets(str);

*input 16 "A"*

A A A A
A A A A
A A A A
A A A A
_ _ _ _ <- old rbp
_ _ _ _ <- old rip

*input 4 "B"*

A A A A
A A A A
A A A A
A A A A
B B B B <- old rbp
_ _ _ _ <- old rip

1.8. Jump tables