能力值:
( LV2,RANK:10 )
|
-
-
2 楼
__asm
{
cmp byte ptr [ebp+C],0f0h
sete al
add byte ptr [ebp+C],al
}
|
能力值:
( 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
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
007A36C1 C745 0C F1000>mov dword ptr [ebp+C], FC000CF1 ;这里修改 "F0" 为 "F1"
用上面这句试试
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
2L是对的。。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
2楼写的是byte ptr,你在OD里写的是dword ptr,当然不对了
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
你的"动态修改"的意思不就是要hook么,那不就是要打补丁咯
代码没问题的,我测试过了
专注汇编30年~除以10= =
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
2楼的答案是正确的,而且很专业。
|
能力值:
( 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 ;这里跳回去,这样就实现了修改串口发送缓冲区的协议
再次谢谢大家的帮助!
在此结贴了
|
|
|