w5271591
驱动牛犊
驱动牛犊
  • 注册日期2007-04-24
  • 最后登录2008-07-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
阅读:1560回复:2

《天方夜读》中,又有个地方不明白,想问一问。。。

楼主#
更多 发布于:2007-10-29 10:41
第19页,下面。
00401001 mov ecx,dword ptr [esp+10h] D ecx = p3
00401005 mov edx,dword ptr [esp+8] D edx = p1
;问题 start
0040100A mov ebx,dword ptr [esp+4] D ebx = p1
;问题 end
0040100F mov esi,dword ptr [esp+14h] D esi = p2
00401014 xor eax,eax C
00401020 mov edi,dword ptr [esi+8] D edi = p2[2]

因为push了两次,esp+8才相当于以前的esp值,现在的esp+4 = (esp+8)-4,好像是局部变量,或者是被push的ecx值,这个地方没有搞懂,不知道是怎么回事。。。
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
沙发#
发布于:2007-10-29 20:33
esp+xxx或者ebp-xxx一般就是局部变量。ebp+xxx一般为参数或者返回地址。没有明白你不明白在哪里啊?!
走走看看开源好 Solaris vs Linux
w5271591
驱动牛犊
驱动牛犊
  • 注册日期2007-04-24
  • 最后登录2008-07-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-10-30 10:13
origin_esp是没有进行push操作的esp值,
00401005 mov edx,dword ptr [esp+8] D edx = p1
这行之前只push了一次,esp+8=esp+4+4=origin_esp+4,[esp+8]是第一个参数p1,
0040100A mov ebx,dword ptr [esp+4] D ebx = p1,
这行之前push了两次,esp+4=esp+8-4=origin_esp-4,[esp+4]就不能是参数p1了,
如果[esp+4]是局部变量的话,[esp+4]是不是等于push ecx中ecx的值。
游客

返回顶部