Slide 23
Slide 23 text
[OPTIONAL HEADER VALUES]
…
400000 image base (00400000 to 00404FFF)
1000 section alignment
1298 entry point (00401298)
…
[.text : 00401000–00401869]
_main:
00401000: 55 push ebp
00401001: 8B EC mov ebp,esp
00401003: A1 04 30 40 00 mov eax,dword ptr ds:[00403004h]
00401008: 50 push eax
00401009: 8B 0D 00 30 40 00 mov ecx,dword ptr ds:[00403000h]
0040100F: 51 push ecx
00401010: E8 0B 00 00 00 call 00401020
00401015: 83 C4 08 add esp,8
00401018: 5D pop ebp
00401019: C3 ret
…
_add:
00401020: 55 push ebp
00401021: 8B EC mov ebp,esp
00401023: 8B 45 08 mov eax,dword ptr [ebp+8]
00401026: 8B 00 mov eax,dword ptr [eax]
00401028: 8B 4D 0C mov ecx,dword ptr [ebp+0Ch]
0040102B: 03 01 add eax,dword ptr [ecx]
0040102D: 5D pop ebp
0040102E: C3 ret
…
00401298: E8 B4 01 00 00 call 00401451
0040129D: E9 91 FE FF FF jmp 00401133
…
[.data : 00403000–00403383]
00403000: 89 06 00 00 92 00 00 00 01 00 00 00 00 00 00 00
00403010: FE FF FF FF FF FF FF FF 4E E6 40 BB B1 19 BF 44
00403020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
…
ab.exe
int shared = 0x92;
int add(int x, int y) {
return x + y;
}
b.c
[.text]
_add:
00000000: 55 push ebp
00000001: 8B EC mov ebp,esp
00000003: 8B 45 08 mov eax,dword ptr [ebp+8]
00000006: 8B 00 mov eax,dword ptr [eax]
00000008: 8B 4D 0C mov ecx,dword ptr [ebp+0Ch]
0000000B: 03 01 add eax,dword ptr [ecx]
0000000D: 5D pop ebp
0000000E: C3 ret b.obj
extern int shared;
int add(int, int);
int a = 0x689;
int main() {
return add(a, shared);
} a.c
[.text]
_main:
00000000: 55 push ebp
00000001: 8B EC mov ebp,esp
00000003: A1 00 00 00 00 mov eax,dword ptr [_shared]
00000008: 50 push eax
00000009: 8B 0D 00 00 00 00 mov ecx,dword ptr [_a]
0000000F: 51 push ecx
00000010: E8 00 00 00 00 call _add
00000015: 83 C4 08 add esp,8
00000018: 5D pop ebp
00000019: C3 ret a.obj
+
CL.exe