首页
社区
课程
招聘
[求助]新手请教跳转到新节的问题
发表于: 2009-6-6 14:04 5490

[求助]新手请教跳转到新节的问题

2009-6-6 14:04
5490
一个程序有.text、.idata、.rdata、和.data共4个节,由于.text节没有空余的空间写自己的代码,我用工具zeroadd给它新增了一个新节:text1,该节的信息为,虚拟地址:01127000;虚拟大小:00001000;物理偏移:00454000;物理大小:00001000;标志:E0000020
现在我想在程序中.AB9C5处跳转到我增加的新节text1的起始处,如下所示:
.text:100AB9C5                 jz      loc_100ABABA       ;在这跳到新节text1的起始处
.text:100AB9CB                 mov     [ebp+arg_4], eax
我该怎么做?望各位大侠帮帮我,我水平不是一般的差,我试了好几天了,总是不成功,先谢谢各位;啦

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
jz指令通常是short格式的(查指令手册,得知INTEL是有near格式的jz指令的,不过从来没见编译器用过),指令长度为2字节,不够一条near的jmp指令,因此修改成jmp指令后,必然会破坏其后的指令,具体会破坏几条指令,至少要够一条jmp指令。

在OD里直接用汇编修改就可以了。记得最后把破坏的指令补回来。
2009-6-6 18:39
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
对不起,老大,可能是我没说清楚,我是想把 “jz      loc_100ABABA”这条指令替换成一条跳到我新加的节起始处的指令,“jz      loc_100ABABA”这条指令   机器码是“    0F 84 EF  00 00 00”,占用了6个字节,应该够新指令用,可是我无论用“JMP FAR PTR”还是“JMP DWORD PTR ”都跳不到我新加节的起始处,用od替换新指令后,到这就找不到目标地址,望老大能给个示例,不胜感激,谢谢!
2009-6-6 20:11
0
雪    币: 427
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
jmp 01127000
不行吗?
2009-6-6 20:41
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
jmp 是段内跳转,更不行了,郁闷
2009-6-6 20:50
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
jz 指令是有 32 位偏移量的形式的,共 6 个字节
2009-6-6 21:09
0
雪    币: 723
活跃值: (81)
能力值: ( 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
2009-6-6 21:19
0
雪    币: 427
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
我不明白了,谁说jmp只能跳段内?
你郁闷,我更郁闷。
2009-6-6 21:24
0
雪    币: 427
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
打SMC补丁或者增加一些代码的时候,经常用jmp在各个段之间跳,今天突然告诉我jmp只能是段内跳转
2009-6-6 21:32
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
10
你明不明白,这是什么意思?
2009-6-6 21:32
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
我看,你根本不太清楚 jmp /call 之类的跳转指令的细节
2009-6-6 21:33
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
对不起大哥,我没别的意思,可我试过N遍了,就是不行,不知为啥
2009-6-6 21:34
0
雪    币: 427
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13
jmp 11127000
这样的吧

忘加基址了前面。
2009-6-6 21:39
0
雪    币: 427
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
细节,不清楚,半道出家的
2009-6-6 21:40
0
雪    币: 202
活跃值: (10)
能力值: ( 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载入,到这就出错
2009-6-6 21:41
0
雪    币: 427
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16
文件方便给出来吗?
pm给我也行,我来学习学习。
2009-6-6 21:46
0
游客
登录 | 注册 方可回帖
返回
//