首页
社区
课程
招聘
[求助]手工移动资源段遇到的问题!!
发表于: 2008-12-26 10:16 3644

[求助]手工移动资源段遇到的问题!!

2008-12-26 10:16
3644
请问.rsrc段和目录表第三项Resources Table
是不是一回事啊?

在我学习的例子中他们指向的是同一个RVA.

谢谢!

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 202
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
请高手指点,先谢过。

最近在学习pe结构,在学习资源目录时,想把一个pe文件的资源段换个位置,于是我把资源段复制到了另外一个地方(winhex里操作),然后用PEditor修正.rsrc段的原始文件偏移为新的位置。结果运行出错,是不是还有其它的地方需要修正,

非常感激高手指点。
2008-12-26 13:02
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
3
我没有做过这些,不敢下断言.
但是rva这个东西你要好好算算的.
2008-12-26 13:06
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
4
除了修改节表之外,更重要的是需要修改数据目录。

程序是通过数据目录的内容来识别资源和各种数据的,而不是节表。

不管看什么PE格式的资料,它都会告诉你,文件的节(section,叫“节”只是个人习惯,“段”是另外一种叫法)只是把一些数据放在一起,节的名字对加载器来说是无意义的,例如一个名字叫.rsrc的节并不表明它就是一个资源的节(是以数据目录中的资源目录为准的),同理,一个名字为.text的节也不代表是代码的节(是以可选头中的BaseOfCode域为准的)。

可以做个实验,把随便一个程序的.text节改名,比如.data,而把.data改名为.text,程序照样是一个合法的PE可执行程序。
2008-12-26 14:04
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
我把两个贴合并了。

一个section就是文件中(如果映射入内存的话,也就是内存中)的一段连续的存储区域。它的名字是什么并不重要,至于通常的.text、.data、.rsrc等命名方式完全是一种约定俗成的东西,你完全可以不用理它。

而数据目录才指出不同的数据都是什么功能。比如Resource table这个目录,指出了文件中用做“资源”的数据位于哪里。

由于通常情况下,连接器会把资源放在一个节中,并把这个节(按照习惯)命名为.rsrc,所以通常情况下你会看到Resource table恰好指向.rsrc节。

如果连接器(或人为地)把资源的节改名,比如随便改个无意义的.abc,由于改的只是这个节的“名字”,这个节里面的数据就是资源,那么Resource table也就指向这个.abc节了。

section是文件结构的范畴。一个section有名字,和属性,但名字和属性与它的功能不具有直接关系(虽然有某些限制,比如程序的代码所在的section必须具有读和执行属性)。

directory是逻辑功能的范畴。一个directory entry定义了某种功能的数据结构位于文件(及内存)中哪个位置,与某个名字的节不要求具有对应关系(虽然习惯上常存在对应,比如输入表对应名为.idata的section,资源表对应名为.rsrc的section等)。
2008-12-26 14:54
0
雪    币: 202
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
非常感谢啊,

版主的回复让我收益匪浅,更让我明白了,前面的路还很长

再次感谢
2008-12-30 22:59
0
游客
登录 | 注册 方可回帖
返回
//