1
2
#include <stdio.h>
3
4
int main( int argc, char *argv[ ], char *envp[ ] )
5

{
6
printf("Hello World!");
7
return 0;
8
}
#include <===> ctrl+a-> ctrl+c-> ctrl+v
main并不是C语言的真正入口函数, 它是由C语言运行时库调用的。
运行时库在调用main函数之前会做一些初始化工作...
在Debug模式下, 查看Call Stack得到
main(int 1, char * * 0x00381040, char * * 0x003810d8) line 5
mainCRTStartup() line 206 + 25 bytes
KERNEL32! 7c817077()

main函数其实是被mainCRTStartup()调用的...
而mainCRTStatrup则是被系统调用的。知之有限...希望以后能了解其详细原理。
好,OD载入...
1
00401005 /$ /E9 06000000 jmp main
2
0040100A | |CC int3
3
0040100B | |CC int3
4
0040100C | |CC int3
5
0040100D | |CC int3
6
0040100E | |CC int3
7
0040100F | |CC int3
8
00401010 >|> \55 push ebp
9
00401011 |. 8BEC mov ebp, esp ; ; 保存寄存器环境
10
00401013 |. 83EC 40 sub esp, 40 ; ; 分配局部变量空间
11
00401016 |. 53 push ebx
12
00401017 |. 56 push esi
13
00401018 |. 57 push edi ; ; 以上三个是C语言规范, 必须保存ebx, esi, edi这三个寄存器
14
00401019 |. 8D7D C0 lea edi, dword ptr ss:[ebp-40] ; ; 系统自动分配10个4字节的栈空间
15
0040101C |. B9 10000000 mov ecx, 10 ; ; 循环计数器
16
00401021 |. B8 CCCCCCCC mov eax, CCCCCCCC ; ; 需要初始化的数值
17
00401026 |. F3:AB rep stos dword ptr es:[edi] ; ; 将edi*eax处的值置0xCCCCCCCC,
18
00401028 |. 68 1C204200 push 0042201C ; /; 0042201C全局数据区字符串
19
0040102D |. E8 2E000000 call printf ; \printf
20
00401032 |. 83C4 04 add esp, 4 ; ; 调用者平衡堆栈
21
00401035 |. 33C0 xor eax, eax ; ; 将main的返回值置0
22
00401037 |. 5F pop edi
23
00401038 |. 5E pop esi
24
00401039 |. 5B pop ebx ; ; 恢复edi, esi, ebx的值
25
0040103A |. 83C4 40 add esp, 40 ; ; 恢复栈空间
26
0040103D |. 3BEC cmp ebp, esp ; ; 比较ebp, esp
27
0040103F |. E8 9C000000 call _chkesp
28
00401044 |. 8BE5 mov esp, ebp
29
00401046 |. 5D pop ebp
30
00401047 \. C3 retn
31
32