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

未解决 汇编代码求解

2023-7-8 18:43
4129

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


[培训]科锐软件逆向50期预科班报名即将截止,速来!!! 50期正式班报名火爆招生中!!!

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

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

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

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

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


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

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

参数一   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编辑 ,原因:
游客
登录 | 注册 方可回帖
返回