汇编语言mov [ebx+18],edi什么意思???大侠解释下。。

 我来答
力波鸿0i
2011-08-20 · TA获得超过1259个赞
知道小有建树答主
回答量:461
采纳率:100%
帮助的人:349万
展开全部
1。将ebx的值拿出来加上18,结果记为X
2。将edi的值复制给内存地址为X的空间

比如ebx = 2, ebx+18 = 20(这里姑且理解18为十进制), edi = 6
假设内存数据全是0,
内存地址 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
内存数据 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
因为edi是32位寄存器,所以edi=0x00000006,而Intel或AMD的CPU都是little endian的,little endian理解起来就是把32位按8位分组,再颠倒,比如0x12345678在内存里就是78 56 34 12,所以存入内存地址20的空间就是(占用20 21 22 23,因为一个字节8位):
内存地址 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 |20 21 22 23| 24 25
内存数据 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |06 00 00 00| 00 00

mov [ebx+18],edi在反汇编里一般就是将一个对象的成员值改为edi
相当于c++里的:
obj->shift18 = edi;
或者c里的:
arr[shift18] = edi;
追问
lea edx,[ebp-04]
这句呢????
谢谢大侠的精彩回答啊!!
追答
lea edx,[ebp-04]有两种解释:
因为lea比sub运算的快,所以很多时候用来算减法:edx = ebp-4;
还有一种是edx是一个指针变量,ebp相当于一个数组, edx = ebp[-4]
而ebp在c++的汇编里,函数开头都有:
push ebp
mov ebp,esp
所以ebp+8一般是函数的第一个实参
ebp-4是第一个临时变量的地址……
就是有函数func(a,b,c,d),
ebp+8就是a的地址,相当于&a: edx=&a;
而ebp+4,呃,是得到函数的地址,相当于edx=(void *func)();
ebp-4是一个局部变量,func(a,b,c,d) { int e;}, 则edx=&e;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式