hook api及看《Windows 95 系統程式設計大奧秘》后的疑惑~!

boywang 2003-08-03 10:20:15
sub esp,4
pushad
mov eax,esp
push eax
call _CCommonReturnPoint
add esp,4
popad
ret

以上是《Windows 95 系統程式設計大奧秘》书中的api spy程序的一段用asm来实现的代码(具体请看原书)。据小弟所知,为了保存寄存器的数据,一般push和pop是成对出现的。为什么上边的代码不是这样:
sub esp,4
pushad
mov eax,esp
push eax
call _CCommonReturnPoint

popad

add esp,4
ret

...全文
37 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
boywang 2003-08-04
  • 打赏
  • 举报
回复
自己顶。
Yashmak 2003-08-04
  • 打赏
  • 举报
回复
Win32Asm中,
子程序的临时变量是在堆栈中存放的,
因此必须在子程序中修改堆栈指针来获取空间。
堆栈的平衡不是依赖于push pop的配对来实现的,
而是在进入子程序时,首先将esp备份到ebx中,
在离开子程序前用ebx恢复esp.

W32API 2003-08-04
  • 打赏
  • 举报
回复
过路
zhaobird 2003-08-04
  • 打赏
  • 举报
回复
能分析一下,更好,关注。
紫郢剑侠 2003-08-04
  • 打赏
  • 举报
回复
易水版主说的是.这要看程序所采用的参数传递方式(约定).
Areslee 2003-08-04
  • 打赏
  • 举报
回复
EAX是参数
它是用的STDCALL调,由被调用者(子程序)恢复堆栈
zbl101 2003-08-03
  • 打赏
  • 举报
回复
eax是参数的说

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧