首页
社区
课程
招聘
[旧帖] 怎么给程序加入重定位表? 0.00雪花
发表于: 2011-11-22 11:53 4628

[旧帖] 怎么给程序加入重定位表? 0.00雪花

2011-11-22 11:53
4628
我手里有个程序。没有重定位表。我该如何才能加入
这个程序不是我自己编写的。
我是想问 可以用什么工具能加入进去。
或者什么方法。
请高手给小弟我解答下吧。

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 6
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我不知道你加重定位表做什么用,但是感觉你对这个的概念还不太清楚。

重定位信息是给系统加载器用的,用与不用,完全取决于进程空间的内存占用情况。一般来说exe总是会被加载到基址指定位置,所以即使有重定位表(例如delphi、BC++程序)也会被忽略。

所以加重定位表首先是没有必要,其次,从技术上来讲也很难实现。重定位表的作用是对绝对地址在需要的时候进行修正,如果原本就没有重定位表,要加这个表的话就需要对每行汇编代码进行手工分析,除非代码很少,否则工作量不可想像。

举个例子,假如exe原先的基址是400000,那么程序代码中会有巨量的绝对地址引用,比如:

401000: mov eax, 412000   <------ 如果这里的412000代表一个地址,就需要在这里添加重定位点,问题是你怎么知道412000代表什么呢?也可能它只是一个图书编号或者是一个其它立即数。
2011-11-22 12:44
0
雪    币: 176
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
汗, 那就是 没有重定位表 就很难加了?
关键是 我想改他的 基址
没有 重定位表 是不是就不能加了?
2011-11-22 14:35
0
雪    币: 6
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
肯定地说,不能。

问一下,为什么要改程序的基址,能说说吗?
2011-11-22 15:05
0
雪    币: 6
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
改程序基址,并不是改个参数那么简单,必须修改程序中的每个绝对地址引用,这也就是DLL为什么要带个重定位表的原因。
重定位表中记录了每个需要修改的地方,而这些个地方只有在被编译的时候才能知道(编译器知道)。

而你现在却想做编译器才能做的事。

只有原本就有重定位表的程序才能修改基址,修改的方法正是利用了重定位表中的定位信息,逐个地方去修改程序指令或数据。
2011-11-22 15:13
0
雪    币: 57
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个很难..除非你毅力超强....每个4K块就是一个重定位表的块...会累死人的......
2011-12-1 20:28
0
游客
登录 | 注册 方可回帖
返回
//