WindSound

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

1
2#include <stdio.h>
3
4int 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 1char * * 0x00381040char * * 0x003810d8) line 5
mainCRTStartup() line 
206 + 25 bytes
KERNEL32
! 7c817077()

main函数其实是被mainCRTStartup()调用的...

而mainCRTStatrup则是被系统调用的。知之有限...希望以后能了解其详细原理。
好,OD载入...

 100401005  //E9 06000000   jmp     main
 20040100A  |  |CC            int3
 30040100B  |  |CC            int3
 40040100C  |  |CC            int3
 50040100D  |  |CC            int3
 60040100E  |  |CC            int3
 70040100F  |  |CC            int3
 800401010 >|> \55            push    ebp
 900401011  |.  8BEC          mov     ebp, esp                     ;  ; 保存寄存器环境
1000401013  |.  83EC 40       sub     esp, 40                      ;  ; 分配局部变量空间
1100401016  |.  53            push    ebx
1200401017  |.  56            push    esi
1300401018  |.  57            push    edi                          ;  ; 以上三个是C语言规范, 必须保存ebx, esi, edi这三个寄存器
1400401019  |.  8D7D C0       lea     edi, dword ptr ss:[ebp-40]   ;  ; 系统自动分配10个4字节的栈空间
150040101C  |.  B9 10000000   mov     ecx, 10                      ;  ; 循环计数器
1600401021  |.  B8 CCCCCCCC   mov     eax, CCCCCCCC                ;  ; 需要初始化的数值
1700401026  |.  F3:AB         rep     stos dword ptr es:[edi]      ;  ; 将edi*eax处的值置0xCCCCCCCC,
1800401028  |.  68 1C204200   push    0042201C                     ; /; 0042201C全局数据区字符串
190040102D  |.  E8 2E000000   call    printf                       ; \printf
2000401032  |.  83C4 04       add     esp, 4                       ;  ; 调用者平衡堆栈
2100401035  |.  33C0          xor     eax, eax                     ;  ; 将main的返回值置0
2200401037  |.  5F            pop     edi
2300401038  |.  5E            pop     esi
2400401039  |.  5B            pop     ebx                          ;  ; 恢复edi, esi, ebx的值
250040103A  |.  83C4 40       add     esp, 40                      ;  ; 恢复栈空间
260040103D  |.  3BEC          cmp     ebp, esp                     ;  ; 比较ebp, esp
270040103F  |.  E8 9C000000   call    _chkesp
2800401044  |.  8BE5          mov     esp, ebp
2900401046  |.  5D            pop     ebp
3000401047  \.  C3            retn
31
32

posted on 2010-05-08 13:33 WindSound 阅读(450) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2010年5月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿

随笔档案(4)

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜