首页
社区
课程
招聘
[求助]EAX 寄存器比较问题
发表于: 2014-6-1 15:14 4644

[求助]EAX 寄存器比较问题

2014-6-1 15:14
4644
EAX 寄存器比较问题(动态修改串口协议)
问题如下;
mov     eax, dword ptr [ebp+C]                ;ebp+C =02FB8764(串口缓冲区地址)

ds:[02FB8764]=FC000CF0

;02FB8764 = "F0"
;02FB8765 = "0C"
;02FB8766 = "00"
;02FB8767 = "FC"

求助如何比较 02FB8764 这个地址的值为"F0"(仅比较这一个地址),如果真则修改为 "F1"

先谢了

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

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 218
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
__asm
{
  cmp byte ptr [ebp+C],0f0h
  sete al
  add byte ptr [ebp+C],al
}
2014-6-1 15:53
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=djzbxxz;1289425]__asm
{
  cmp byte ptr [ebp+C],0f0h
  sete al
  add byte ptr [ebp+C],al
}[/QUOTE]

先谢谢!
还是没明白,是直接写这个补丁吗?我试了一下,好像无法实现要求

我的理解;

sete al    ;得到 ebp+C 低字节值 也就是 "F0" ,测试实际不正确

add byte ptr [ebp+C],al  ;把al 加到ebp+C 测试也不正确

能不能解释一下呢。

下面是我在 0d 中补的(当然是错误的)

007A36B5      50            push    eax
007A36B6      8B45 0C       mov     eax, dword ptr [ebp+C]
007A36B9      8138 F0000000 cmp     dword ptr [eax], 0F0  ;这里EAX 的值 = "FC000CF0"
007A36BF      75 07         jnz     short 007A36C8                  
007A36C1      C745 0C F1000>mov     dword ptr [ebp+C], 0F1  ;这里修改 "F0" 为 "F1"
007A36C8      58            pop     eax
007A36C9    ^ E9 769ACCFF   jmp     0046D144
2014-6-1 19:20
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
007A36C1      C745 0C F1000>mov     dword ptr [ebp+C], FC000CF1  ;这里修改 "F0" 为 "F1"
用上面这句试试
2014-6-1 22:53
0
雪    币: 23
活跃值: (1376)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
2L是对的。。
2014-6-2 05:06
0
雪    币: 7344
活跃值: (4044)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
2楼写的是byte ptr,你在OD里写的是dword ptr,当然不对了
2014-6-2 06:51
0
雪    币: 218
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你的"动态修改"的意思不就是要hook么,那不就是要打补丁咯

代码没问题的,我测试过了

专注汇编30年~除以10= =
2014-6-2 12:54
0
雪    币: 59
活跃值: (1481)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
2楼的答案是正确的,而且很专业。
2014-6-2 22:06
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=djzbxxz;1289425]__asm
{
  cmp byte ptr [ebp+C],0f0h
  sete al
  add byte ptr [ebp+C],al
}[/QUOTE]

谢谢!,也谢谢各位的热心帮助!
我把结果贴出来,表示对各位的谢意!

我是直接在环境中找空位来实现的

xxxxxxxx      50            push    eax
xxxxxxxx      8B45 0C       mov     eax, dword ptr [ebp+C]
xxxxxxxx      8038 F0       cmp     byte ptr [eax], xxx           ;这里应该是byte才对,cmp eax+n 可以比较相关地址的数据
xxxxxxxx      75 03         jnz     xxxxxxxx                  
xxxxxxxx      8300 01       add     dword ptr [eax], xxx        ;这里只要eax+n 就可以修改相关地址的数据
xxxxxxxx      58            pop     eax
xxxxxxxx   ;这里跳回去,这样就实现了修改串口发送缓冲区的协议

再次谢谢大家的帮助!
在此结贴了
2014-6-3 13:29
0
游客
登录 | 注册 方可回帖
返回
//