空函数
#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 版权协议,转载请附上原文出处链接和本声明。