能力值:
(RANK:260 )
|
-
-
2 楼
jz指令通常是short格式的(查指令手册,得知INTEL是有near格式的jz指令的,不过从来没见编译器用过),指令长度为2字节,不够一条near的jmp指令,因此修改成jmp指令后,必然会破坏其后的指令,具体会破坏几条指令,至少要够一条jmp指令。
在OD里直接用汇编修改就可以了。记得最后把破坏的指令补回来。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
对不起,老大,可能是我没说清楚,我是想把 “jz loc_100ABABA”这条指令替换成一条跳到我新加的节起始处的指令,“jz loc_100ABABA”这条指令 机器码是“ 0F 84 EF 00 00 00”,占用了6个字节,应该够新指令用,可是我无论用“JMP FAR PTR”还是“JMP DWORD PTR ”都跳不到我新加节的起始处,用od替换新指令后,到这就找不到目标地址,望老大能给个示例,不胜感激,谢谢!
|
能力值:
( LV6,RANK:90 )
|
-
-
4 楼
jmp 01127000
不行吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
jmp 是段内跳转,更不行了,郁闷
|
能力值:
( LV9,RANK:170 )
|
-
-
6 楼
jz 指令是有 32 位偏移量的形式的,共 6 个字节
|
能力值:
( LV9,RANK:170 )
|
-
-
7 楼
.text:100AB9C5 jz loc_100ABABA ;在这跳到新节text1的起始处
.text:100AB9CB mov [ebp+arg_4], eax
这个 jz 使用了 32 位的 offset,所以这个 jz 是 6 bytes.
100AB9CB - 100AB9C5 = 6 bytes
所以,你可以直接修改为 jmp 指令
改为:90 e9 35 b6 07 F1 (6 bytes)
因为:01127000-100AB9CB=F107B635
|
能力值:
( LV6,RANK:90 )
|
-
-
8 楼
我不明白了,谁说jmp只能跳段内?
你郁闷,我更郁闷。
|
能力值:
( LV6,RANK:90 )
|
-
-
9 楼
打SMC补丁或者增加一些代码的时候,经常用jmp在各个段之间跳,今天突然告诉我jmp只能是段内跳转
|
能力值:
( LV9,RANK:170 )
|
-
-
10 楼
你明不明白,这是什么意思?
|
能力值:
( LV9,RANK:170 )
|
-
-
11 楼
我看,你根本不太清楚 jmp /call 之类的跳转指令的细节
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
对不起大哥,我没别的意思,可我试过N遍了,就是不行,不知为啥
|
能力值:
( LV6,RANK:90 )
|
-
-
13 楼
jmp 11127000
这样的吧
忘加基址了前面。
|
能力值:
( LV6,RANK:90 )
|
-
-
14 楼
细节,不清楚,半道出家的
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
[QUOTE=mik;637709].text:100AB9C5 jz loc_100ABABA ;在这跳到新节text1的起始处
.text:100AB9CB mov [ebp+arg_4], eax
这个 jz 使用了 32 位的...[/QUOTE]
我也试过向您说的那样,直接改机器码,e9(jmp)+偏移量,可是用og载入,到这就出错
|
能力值:
( LV6,RANK:90 )
|
-
-
16 楼
文件方便给出来吗?
pm给我也行,我来学习学习。
|
|
|