首页
社区
课程
招聘
[旧帖] [求助]esp+?代表第幾個 0.00雪花
发表于: 2008-11-14 12:45 3161

[旧帖] [求助]esp+?代表第幾個 0.00雪花

2008-11-14 12:45
3161
我想問下一個假如程序代碼中有如下反匯編
push ebp
push ebx
push ecx
push edx
mov ebp,esp
mov eax,[esp+4]
這裡面[esp+4]到底代表 edx 還是 ecx 的内容呢
再問下假如有如下代碼
push ebp
push ebx
push ecx
push edx
mov ebp,esp
push 1
call 00123456
mov ecx,eax
mov eax,[esp+8]
這裡面[ESP+8]可能是0123456中的某個内容麼 還是一定是edx或者 ecx呢

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
第一个[esp+4]的值是ecx。因为最后push进去的是edx,他就是[esp],倒数第二个push进去的是ecx,就是[esp+4]。
第二个[esp+8]的值取决于那个call。看这里的call用的是什么调用方式,如果是被调用者清栈的话,看call有几个参数,就可以算出来[esp+8]是多少了;同样,如果是调用者清栈,这里也很容易算出来[esp+8]。
2008-11-14 13:24
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多謝指點
我一直不能確定
經過確認就不會出錯了
那再問下
push ebp                              esp=00111120
mov ebp,esp
sub esp,10
push ebx                              esp=0011110c
push ecx                               esp=00111108
push edx                              esp=00111104
xor ebx ,ebx
mov [esp+4],ebx
mov [esp+8],ebx
mov [esp+0c]ebx
mov [esp+10],ebx
push 1                                 esp=00111100
call 00123456
mov ecx,eax
mov eax,[esp+8]                 esp=00111100
leave
ret
CALL 00123456内會不會出現 esp=00111108 呢 就是和他上方ESP相等 還是說ESP是唯一的 不能相等
現在的esp+8是0還是ecx 或者是call内的内容呢
2008-11-14 13:40
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
誰能教我一下呢
2008-11-14 17:02
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
esp可以理解成一个指针,堆栈就好像一个DWORD数组。一般call里面esp都是比之前的esp数值小。call里面局部变量就是靠sub esp这种方法产生的。刚进call时,[esp]里面是返回地址,如果有参数通过堆栈传递进来的话,就是[esp+4],[esp+8]等等。不过一般进来call之后,前几句都是push ebp和mov ebp,esp。有局部变量的话,还有sub esp,XX。之后通过ebp来操作局部变量和参数。建议你看一下前几天有人发的那个堆栈变化分析的帖子。
回答你的问题,正常情况下,在call 00123456内不会出现esp=0011108的情况。你问现在esp的值是什么?看你的标注,call完之后esp=00111100。难道你想问的是[esp]的值?
2008-11-14 18:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=icersg;535420]esp可以理解成一个指针,堆栈就好像一个DWORD数组。一般call里面esp都是比之前的esp数值小。call里面局部变量就是靠sub esp这种方法产生的。刚进call时,[esp]里面是返回地址,如果有参数通过堆栈传递进来的话,就是[esp+4],[esp+8]等等。不过一般进来call之后,...[/QUOTE]

在CALL里面应该esp应该有可能经过不同的代码应该有可能会变为esp=00111108的把?
只是不管怎么变 进CALL后与返回CALL  ESP的直肯定是相等的`````
2008-11-14 20:54
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不一定相等的  經常遇到 出來比進去反而多了4 ( 今天我跟蹤的那個程序 出來也不平衡堆棧 就是多4字節  )  我上面要問的是 esp+8 少打個8  忘記了   意思就是說他能不能 是 mov[esp+4],ebx 中的 [esp+4]的内容 我再去翻番帖子
2008-11-14 23:29
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
8
函数调用约定不同,调用后和调用前的esp不一定相等
2008-11-14 23:32
0
游客
登录 | 注册 方可回帖
返回
//