首页
社区
课程
招聘
[求助]我在跟踪一个程序的时候,看到这句代码,想请教一下各们大虾这句代码大概是做些什么的
发表于: 2008-3-13 00:28 5458

[求助]我在跟踪一个程序的时候,看到这句代码,想请教一下各们大虾这句代码大概是做些什么的

2008-3-13 00:28
5458
是参数压栈的代码,大概如下
lea eax, dword ptr[ebp - 20e0]
push eax
..
mov edx, dword ptr[ebp + 8]
push edx
...
lea ecx dword ptr[ebp - 20e8]
push ecx
call ...

ebp在是入这个函数的时候,保存的就是esp的指针,但是当我看到ebp -20e0这句的时候,我有点疑或,ebp里是esp的指针,那么就是说栈顶指针减20e0,这个值是个什么值?按push一次栈指针递增4位的话,那20e0这个值得执行2000多次push啊,感觉这不在可能,那么ebp -20e0这个值,实际上是怎样存进去的,进入函数后,怎样推出esp - 20e0就可以得到原先存进去的值?
不知道各位大虾有没有遇过这样的代码,解释一下这样的代码是表达什么意思的...在此先谢谢关注本贴的朋友

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 266
活跃值: (52)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
一个空间很大的局部变量,如: char c1[0x20e0];
2008-3-13 08:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[ebp-20e0]只是传个下面call的一个参数而已
2008-3-13 08:10
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
to szdbg
有可能!谢谢你的想法!

to lovelyfrog
我知道是传参,问题是这个参数是怎样来的,我在1楼也说了,如果是上1级call传下来的,那得PUSH N多次....
2008-3-13 14:57
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我知道了``还有一个可能,就是局部变量
2008-3-13 20:19
0
雪    币: 248
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不是可能,一定是局部变量
2008-3-13 20:40
0
雪    币: 266
活跃值: (52)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
7
干嘛要PUSH N次呢? 比如: sub esp,0x20e0不一次就搞定了
当然实际中,对于这么大局部变量不会这样直接减,而会调用一个库函数来分配变量空间,以防止变量空间分配到无效的页面上去
2008-3-13 20:53
0
雪    币: 189
活跃值: (56)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
先预留的局部变量的空间,还没有初始化
2008-3-13 21:58
0
游客
登录 | 注册 方可回帖
返回
//