首页
社区
课程
招聘
未解决 汇编代码求解
发表于: 2023-7-8 18:43 4211

未解决 汇编代码求解

2023-7-8 18:43
4211

已知[ebp+8]里面是ebp+4的地址,[ebp+4]里面是0x123,图上划黑线处,代码不理解。
疑问:edx里面是地址,按我的理解[edx]不就是0x123吗,而ecx是0x124,可以像黑线处这样,把0x124移动到0x123吗?,感觉此处怪怪的。
我的理解应该有问题,求解答!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 7388
活跃值: (4096)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
参数是引用,[ebp+8]的值是参数地址,所以eax和edx的值都是传递进去的参数地址
2023-7-8 21:49
1
雪    币: 248
活跃值: (1096)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

1,“地址”和“地址里的内容"要搞清楚。
一加中括号就表示地址,例如:mov [edx],ecx ;把寄存器ecx的数值放到以edx为地址的空间中,不是放到edx寄存器。

2,内存地址之间的数据交换不能直接进行,必须经过寄存器作为中间商进行。

最后于 2023-7-8 22:40 被sixL编辑 ,原因:
2023-7-8 22:35
1
雪    币: 4994
活跃值: (2901)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
函数定义  void add(int &ref), 传入参数 是 引用型, 也就是 ref的地址  edx = [ebp + 8] = &ref
[edx] = ref;
2023-7-8 23:19
0
雪    币: 240
活跃值: (611)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5

我知道了,mov [edx],ecx,      [edx]做为被赋值对象,不需要对其地址进行取值,故ecx可以给[edx]赋值。


我之前的疑问:[edx]不就是对其里面地址进行取值吗,ecx也是值,值怎么可以对值进行赋值

最后于 2023-7-8 23:40 被goose007编辑 ,原因:
2023-7-8 23:35
0
雪    币: 240
活跃值: (611)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
可以这样理解吗?
2023-7-8 23:41
0
雪    币: 4994
活跃值: (2901)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
[EDX] 在 源操作数, 目标操作数上 意义不一样。 在源位置,表示取得指定内存地址EDX单元的值; 在目标位置, 表示 保存值到指定内存地址EDX的存储单元上。 
2023-7-9 00:36
1
雪    币: 4396
活跃值: (4383)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8

参数一   int &ref  表示传入的是值的地址. 而不是值本身.     

我们可以把 &ref  比喻口袋. ref是口袋中的苹果     &ref = [ebp+8]//口袋     ref=[ [ebp+8] ]//口袋里面才是苹果

我们的目标是加入一个苹果,而不是直接添加一个口袋,  
所以我们先要把苹果 ref 取出来 , ref=[ [ebp+8] ]
把苹果 ref 加入一个,又放回口袋里面去. [ [ebp+8] ] = ref

具体使用哪个寄存器看编译器决定,只要在函数中空闲的寄存器即可.  eax/edx/ebx...

最后于 2023-7-9 09:30 被Mxixihaha编辑 ,原因:
2023-7-9 09:28
0
游客
登录 | 注册 方可回帖
返回
//