C语言反汇编代码(三大结构)

  • Post author:
  • Post category:其他


空函数

#include <stdio.h>

void Test1(){}  
void Test2(int a, int b){}
void Test3()
{
    int a = 10;
    int b = a + 20;
}
void Test4(int a, int b)
{
    int c = a + b;
}
int main()
{
    char *p1 = "无参数空函数!";//定义一个字符串  在OD中容易定位
    Test1();
    char *p2 = "有参数空函数!";//定义一个字符串  在OD中容易定位
    Test2(1,2);
    char *p3 = "无参数有局部变量函数!";//定义一个字符串  在OD中容易定位
    Test3();
    char *p4 = "有参数有局部变量函数!";//定义一个字符串  在OD中容易定位
    Test4(1,2);

    return 0;
}

在vs中反汇编代码如下:


Test1

:

Test1:
00AE13D0 55                   push        ebp      ;保存ebp寄存器
00AE13D1 8B EC                mov         ebp,esp    
00AE13D3 81 EC C0 00 00 00    sub         esp,0C0h  ;设置栈帧  
00AE13D9 53                   push        ebx   ;保存ebx
00AE13DA 56                   push        esi   ;保存esi
00AE13DB 57                   push        edi   ;保存edi 
00AE13DC 8D BD 40 FF FF FF    lea         edi,[ebp-0C0h]  ;讲ebp-0c0h的地址 存到edi里面
00AE13E2 B9 30 00 00 00       mov         ecx,30h         ;计数器  循环0x30次
00AE13E7 B8 CC CC CC CC       mov         eax,0CCCCCCCCh  
00AE13EC F3 AB                rep stos    dword ptr es:[edi]  ;将eax值存入edi的地址 填充0x30次
00AE13EE 5F                   pop         edi  
00AE13EF 5E                   pop         esi  
00AE13F0 5B                   pop         ebx  
00AE13F1 8B E5                mov         esp,ebp  
00AE13F3 5D                   pop         ebp  
00AE13F4 C3                   ret       ;返回


OD中代码

: 和vs中反汇编代码一样

00AE13D0 >  55              push ebp
00AE13D1    8BEC            mov ebp,esp
00AE13D3    81EC C0000000   sub esp,0xC0
00AE13D9    53              push ebx
00AE13DA    56              push esi                                 ; 空函数.<ModuleEntryPoint>
00AE13DB    57              push edi
00AE13DC    8DBD 40FFFFFF   lea edi,dword ptr ss:[ebp-0xC0]
00AE13E2    B9 30000000     mov ecx,0x30
00AE13E7    B8 CCCCCCCC     mov eax,0xCCCCCCCC
00AE13EC    F3:AB           rep stos dword ptr es:[edi]
00AE13EE    5F              pop edi                                  ; 空函数.00AE14EA
00AE13EF    5E              pop esi                                  ; 空函数.00AE14EA
00AE13F0    5B              pop ebx                                  ; 空函数.00AE14EA
00AE13F1    8BE5            mov esp,ebp
00AE13F3    5D              pop ebp                                  ; 空函数.00AE14EA
00AE13F4    C3              retn


Test2

:

;代码和Test1一模一样,唯一不一样的是Test2堆栈中压入了参数。


OD中代码

:和上面代码一样


Test3

Test3:
00AE1430 55                   push        ebp  
00AE1431 8B EC                mov         ebp,esp  
00AE1433 81 EC D8 00 00 00    sub         esp,0D8h  ;增大了
00AE1439 53                 



版权声明:本文为qq_36811299原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。