反汇编中的 “lea eax,dword ptr ss:[esp-8]” 什么意思

litorat 2008-06-08 05:47:04
lea eax,dword ptr ss:[esp-8]
这个什么意思??
...全文
5531 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyblack 2008-10-04
  • 打赏
  • 举报
回复
lea 指令是用来获得内存单元的偏移地址。

例如lea eax, dword [esp - 8]

;因为[esp - 8] 内存单元你无法确定其内存偏移,所以必须通过lea指令来获取其内存单元的偏移。。
水墨风光 2008-10-02
  • 打赏
  • 举报
回复
eax = esp -8
rageliu 2008-07-03
  • 打赏
  • 举报
回复
取栈上的地址,也就是局部变量的指针
yc_8301 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jennyvenus 的回复:]
引用 10 楼 Albert_1030 的回复:
引用 4 楼 cnzdgs 的回复:
lea eax,dword ptr ss:[esp-8]
这是取一个动态变量的指针。

真不厚道


很正确吧,从物理上看是将esp-8的值送给eax,从逻辑上看就是取变量的地址。
[/Quote]
我是一个初学者,,还没有入门,但是觉得这句很经典。。。
从物理上看是将esp-8的值送给eax,从逻辑上看就是取变量的地址。
GeomaticMm 2008-07-02
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jennyvenus 的回复:]
是的,在高级语言用编译程序生成的二进制代码中,这是很常见的指令,

因为mov 指令不支持减法操作(是不支持吧,我是否记错了),比如mov eax, esp - 8,是不正确的…
[/Quote]
mov指令只是简单的数据传送指令啊
mov eax,esp - 8肯定不对了
mov eax,[esp - 8]还行
然后楼上的lea指令,改写成mov eax,offset ss:[esp - 8]从语法上讲也是可行的
不过lea指令和offset用法上有不同
offset指令是在编译的时候就把offset ss:[esp - 8]换成esp-8这个内存单元相对于ss段的偏移了
适用于可以在编译时确定的内容
所以全局的内容都可以使用offset来求偏移
lea指令是在程序执行阶段实时计算偏移,用于无法在编译时就确定的内容
比如局部变量之类的
我刚才所说的只是讨论语法 没有关注lea eax,ss:[esp - 8]指令的实际情况
然后说的不太清楚 因为自己理解的也不深 大家包涵
ebp用于在子函数中引用函数的参数以及局部变量
一般情况下,ebp+x引用函数的参数,ebp-x引用局部变量
用户 昵称 2008-07-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 Geomatic 的回复:]
刚才看了楼上的解释
有点迷惑了
查书验证了下
LEA是取有效地址指令
LEA EAX,DWORD PTR SS:[ESP-8]是把SS:[ESP-8]这个内存单元相对于SS段的偏移地址送入EAX寄存器吧
也就是把ESP-8这个值
如果有不对的地方 请高手指教
[/Quote]

是的,在高级语言用编译程序生成的二进制代码中,这是很常见的指令,

因为mov 指令不支持减法操作(是不支持吧,我是否记错了),比如mov eax, esp - 8,是不正确的,所以大多数自动生成的指令都是用lea eax,[esp-8]这种方法。

不过按俺的理解,用ebp的似乎更多。

GeomaticMm 2008-07-01
  • 打赏
  • 举报
回复
刚才看了楼上的解释
有点迷惑了
查书验证了下
LEA是取有效地址指令
LEA EAX,DWORD PTR SS:[ESP-8]是把SS:[ESP-8]这个内存单元相对于SS段的偏移地址送入EAX寄存器吧
也就是把ESP-8这个值
如果有不对的地方 请高手指教
用户 昵称 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Albert_1030 的回复:]
引用 4 楼 cnzdgs 的回复:
lea eax,dword ptr ss:[esp-8]
这是取一个动态变量的指针。

真不厚道
[/Quote]

很正确吧,从物理上看是将esp-8的值送给eax,从逻辑上看就是取变量的地址。
huxiaolai 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jxc25 的回复:]
你给分就给你讲.
[/Quote]
^_^,高手
Albert_1030 2008-06-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cnzdgs 的回复:]
lea eax,dword ptr ss:[esp-8]
这是取一个动态变量的指针。
[/Quote]
真不厚道
tangyingzhao 2008-06-09
  • 打赏
  • 举报
回复
lea eax,dword ptr ss:[esp-8]

从esp-8 指想的内存处获取dword类型的值写入EAX
BAYNPU 2008-06-09
  • 打赏
  • 举报
回复
Syser Debugger软件
下载网址:http://www.onlinedown.net/soft/41141.htm
litorat 2008-06-08
  • 打赏
  • 举报
回复
说个名字出来撒,再开贴给你分
jxc25 2008-06-08
  • 打赏
  • 举报
回复
你给分就给你讲.
cnzdgs 2008-06-08
  • 打赏
  • 举报
回复
lea eax,dword ptr ss:[esp-8]
这是取一个动态变量的指针。
litorat 2008-06-08
  • 打赏
  • 举报
回复
esp 减少么??

1楼的用的什么调试器呢??
大熊猫侯佩 2008-06-08
  • 打赏
  • 举报
回复
将 esp - 8 的值放入 eax ,即取 ss:[esp-8] 的偏移地址

21,496

社区成员

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

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