能力值:
( LV2,RANK:10 )
|
-
-
2 楼
请高手指点,先谢过。
最近在学习pe结构,在学习资源目录时,想把一个pe文件的资源段换个位置,于是我把资源段复制到了另外一个地方(winhex里操作),然后用PEditor修正.rsrc段的原始文件偏移为新的位置。结果运行出错,是不是还有其它的地方需要修正,
非常感激高手指点。
|
能力值:
(RANK:300 )
|
-
-
3 楼
我没有做过这些,不敢下断言.
但是rva这个东西你要好好算算的.
|
能力值:
(RANK:260 )
|
-
-
4 楼
除了修改节表之外,更重要的是需要修改数据目录。
程序是通过数据目录的内容来识别资源和各种数据的,而不是节表。
不管看什么PE格式的资料,它都会告诉你,文件的节(section,叫“节”只是个人习惯,“段”是另外一种叫法)只是把一些数据放在一起,节的名字对加载器来说是无意义的,例如一个名字叫.rsrc的节并不表明它就是一个资源的节(是以数据目录中的资源目录为准的),同理,一个名字为.text的节也不代表是代码的节(是以可选头中的BaseOfCode域为准的)。
可以做个实验,把随便一个程序的.text节改名,比如.data,而把.data改名为.text,程序照样是一个合法的PE可执行程序。
|
能力值:
(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等)。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
非常感谢啊,
版主的回复让我收益匪浅,更让我明白了,前面的路还很长
再次感谢
|
|
|