首页
社区
课程
招聘
一种函数调用,没看懂意思,高手帮忙
发表于: 2010-6-8 13:37 3307

一种函数调用,没看懂意思,高手帮忙

2010-6-8 13:37
3307
子函数体
        100143E0  /$ /75 01         jnz     short 100143E3
        100143E2  |. |C3            retn
        100143E3  |> \55            push    ebp
        100143E4  |.  8BEC          mov     ebp, esp
                 .....
        10014400  |.  58            pop     eax
        10014401  |.  8BE5          mov     esp, ebp
        10014403  |.  5D            pop     ebp
        10014404  \.  C3            retn

调用部分
           10006460  /$  55            push    ebp
        10006461  |.  8BEC          mov     ebp, esp
        10006463  |.  83EC 10       sub     esp, 10
           ....
                100064BA  |>  83C4 10       add     esp, 10
        100064BD  |.  3BEC          cmp     ebp, esp      //这句比较的意义在于什么?
        100064BF  |.  E8 1CDF0000   call    100143E0

上面两段代码cmp ebp, esp这句这个比较是作什么用的?
正常情况下ebp和esp一定相等的啊。
怎么会出现在子函数外作比较,子函数内作判断跳转的这句形式的代码?
谢谢 .

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
保证堆栈不会被破坏的检测吧
防止你在操作过程中破坏了堆栈
2010-6-8 13:51
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
嗯,看着是在检测栈使用前使用后是否平衡,但是这样的检测代码是怎样生成的呢?
try..catch可以生成这样的么?还是什么东西搞出来的这种形式。vc++7.0 debug的代码
2010-6-8 13:56
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
就是debug模式下编译的代码
你换成release模式下重新编译,调试一下就知道了
2010-6-8 14:05
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
VC编译器项目属性 -> C/C++ -> 代码生成 -> 基本运行时检查,这里如果选择了“堆栈桢”或者“两者”(两者包括堆栈桢),那么编译后将会有这段检测代码。
Debug下默认选择“两者”,而Release下则是“默认”,也就是不检测,可另行更改。
2010-6-8 14:21
0
雪    币: 780
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
终于明白了
2010-6-8 14:22
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
哦,原来是编译器自动生成的检测代码,谢谢啦
2010-6-8 14:47
0
游客
登录 | 注册 方可回帖
返回
//