练习代码 工具:x32dbg

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<stdlib.h>
void Fun1(void)
{
}
int main()
{
printf("Fun1的地址 0x%x", Fun1);
Fun1();
return 0;
}

Fun1的地址 0x2f1136

ctrl + g 0x2f1136 根据 [esp] 向上追一层 转到 0x002F18D8

定位到main 函数 0x002F18A0

main 函数处下断 根据esp 转上一层 0x002F2093

main函数在第4个call 被调用; 继续追 [esp] = 0x002F1EE7(第4个函数是main)

特征码 test je 2个mov push call add call (invoke _main函数)

向上追

根据[esp] = 0x002F1D7D 反汇编转到 ,(_scrt_common_main_seh函数)

向上追 [esp] = 0x002F2118

转到上一层 (_scrt_commom_main函数)

结束了 [esp] 的值 是7 开头 ,这是内核的代码了 ,最后也就是追到_mainCRTstartup

断点过程

调用流程