能力值:
(RANK:260 )
|
-
-
2 楼
节表中的项是用来描述文件的节的属性的。
如果对应的节发生了变化,那么节表中的项自然需要作出相应的变化。
而如果文件中的节没有变化,而却修改了节表中的项,此时节表中的项就描述了错误的节属性。那么程序就不正确了。
节表的变化是要与文件中的节相对应的。节的内容怎么变,节表就怎么变。
反之,节表怎么变,节本身也应该怎么变。
比如,把.text节的文件偏移地址从0x100移动到0x200,那你就要在.text节前面插入0x100个字节,使它的偏移确实是0x200。否则,节中表指向的0x200就不是正确的.text节了。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
LS的哥哥 我把节表中的.text的文件偏移地址从400改成了500 然后我把底下.text的节的第一行16进制数据(我是用C32)从400复制到500处,原先那行填充为00 ,后发现程序不能运行了
哥哥我这样改变.text的文件偏移地址对吗
谢谢你
|
能力值:
(RANK:260 )
|
-
-
4 楼
你怎么会这么改。。。
一个section就是一块数据,内存映像是从文件映像中映射来的。正因为采取了文件映射的方法,所以要求section在内存中要按页对齐,而在文件中要按块对齐。
举个例子,比如.text节是0x200个字节,磁盘块也是0x200字节,那么这个节在文件中占0x200个字节,而映射到内存中占一个页面(通常是4K字节)。
在section table中的表项中,VirtualAddress = 0x1000,VirtualSize = 0x1000,假设文件的base为0x400000,那么内存中0x401000 - 0x401fff这段区域就是.text节。
而如果RawAddress = 0x500,RawSize = 0x200,说明这个节的数据存储在文件中的0x500 - 0x6ff范围。
系统加载程序时,将文件中的0x500 - 0x6ff这512字节的内容映射到内存中0x401000 - 0x4011ff这个范围,而将剩下的0x401200 - 0x401fff的内容用0填充。
所以,你要移动数据,必须将整个节移动到新的位置。否则就不正确。
|
能力值:
( LV9,RANK:180 )
|
-
-
5 楼
我的ID可不可以改成section ?
|
|
|