首页
社区
课程
招聘
[求助]请教 delphi写内存问题
发表于: 2009-7-13 16:14 4641

[求助]请教 delphi写内存问题

2009-7-13 16:14
4641
请教 delphi写内存问题
我想把如下pyadd2处的call XXXXXXXX改成call 004189BB1l,用delphi写如下代码
const
  Resource: dword = $004189BB1;
.
.
.
GetWindowThreadProcessId(hw,@pid);
h:= OpenProcess(PROCESS_ALL_ACCESS,false,pid);
WriteProcessMemory(h,pointer(pyadd2),@Resource,sizeof(Resource),tt);
运行后用OD看pyadd2处指令被改掉了,可结果为什么不是004189BB1呢?

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 290
活跃值: (20)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
你没有理解CALL XXXXX这个XXXX是怎么计算来的
先理解了就知道为什么了
2009-7-13 17:24
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
call 后面有相对地址和绝对地址。你得分清楚了
2009-7-13 17:28
0
雪    币: 228
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼上两位说的正确,但是简单了一点,找了个详细说明结贴。
汇编指令的跳转,包括各种不同的跳转,我们在看一些跟踪或分析软件显示的是JMP后面跟着跳转到的目标地址,而在机器码上却是使用偏移量的,所以是从JMP指令后面的地址开始计算的,两条在不同地址上的跳转指令跳转到同一目标地址,它们的机器码是不一样的,是不是这个原因啊?

举例来说:
00500000 EB F0 10 00 00    JMP 005010F5
......
00500100 EB  F0 0F 00 00  JMP 005010F5

两条指令看反汇编代码完全一样,但它们的机器码是不一样的。一般来说这样算:
偏移量=目标地址-(指令地址+5)
例如上面第一条的000010F0,就是005010F5-(00500000+5)得来的。

所以如果注入的代码是以机器码方式写入内存的,要注意计算好这个偏移量。

对我这样的新手这个解释比较明了。
2009-7-14 09:23
0
游客
登录 | 注册 方可回帖
返回
//