[复习笔记-面向逆向]Hello World!

[复习笔记-面向逆向]Hello World!

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

你可能感兴趣的:([复习笔记-面向逆向]Hello World!)