社区
汇编语言
帖子详情
mov eax, [ebp-18h]表示的是第几个局部变量
stsz_sky
2007-09-01 08:53:50
[ebp-18h]表示的是第几个局部变量呢?怎么算的呢?
...全文
133
3
打赏
收藏
mov eax, [ebp-18h]表示的是第几个局部变量
[ebp-18h]表示的是第几个局部变量呢?怎么算的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pig4210
2007-09-01
打赏
举报
回复
同意楼上说的。
一般来说,如果函数体第一句是push ebp的话,那么第一个变量从[esp-4]开始算起,否则从[esp]开始算起。
如果都是dword类型的局部变量的话,[esp-18h]一般来说是第五个变量。
sunlin7
2007-09-01
打赏
举报
回复
楼主是编32位的喽,
这个还真不确定是第几局部变量。
比如函数:
_Main proc
local hello[10]:dword // 一下子就占用了10*4字节的栈空间。 ret
_Main endp
所以得从第一个局部变量开始,然后用4字节对齐,一直计算到目标局部变量,才能确定到底是多少。
大熊猫侯佩
2007-09-01
打赏
举报
回复
强烈建议楼主自己通过调试了解!
魔恩:如何找CALL参数[esp/
ebp
+*]来源与
局部变量
[
ebp
-*]来源
找这种:
MOV
EBX,DWORD PTR SS:[ESP+10] 的来源,要知道:[esp/
ebp
+8] 是CALL的第一个参数 [esp/
ebp
+0c] 是CALL的第二个参数 [esp/
ebp
+10] 是CALL的第三个参数 类推,每次都是加4,因为push 占用4字节。找法的话,通过找上一层CALL的参数,例如:[esp+8] 是上一层第一个参...
关于编译型语言函数的调用(二)
接上文: http://blog.csdn.net/prsniper/article/details/40652451 上文中提到的
局部变量
的地址,第一个是[
ebp
-4],由于32位内存对齐的原因,第二个是[
ebp
-8],对于VC7以上的版本,这个地址可能会不一样 比如第一个可能是[
ebp
-8],第二个飞到[
ebp
-14],这是VS.NET的VC编译器在每个
局部变量
前后都加一个DW
汇编命令 解释
比如你用local在栈上定义了一个
局部变量
LocalVar,你知道实际的指令是什么么?一般都差不多像下面的样子: push
ebp
mov
esp,
ebp
sub esp, 4 现在栈上就有了4各字节的空间,这就是你的
局部变量
。 接下来,你执行
mov
LocalVar, 4,那么实际的指令又是什么?是这样:
【函数调用堆栈】
函数返回值是结构体
ebp
函数堆栈esp_函数参数压栈,栈帧
ebp
,esp怎样移动的?
压栈一次esp-4,
ebp
不变esp是栈顶指针寄存器,堆栈操作只和esp有关比如有一个函数a,有两个参数,一般是这样的PUSH 1 参数2压栈,esp-4PUSH 2 参数1压栈,esp-4CALL a 调用a:PUSH
EBP
保存
ebp
MOV
EBP
,ESP 改变栈帧,以后访问参数通过
ebp
,访问
局部变量
通过espSUB ESP,8 分配
局部变量
空间...ADD ESP,8POP
EBP
恢复...
汇编语言
21,459
社区成员
41,600
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章