首頁
社區(qū)
課程
招聘
添加.rsrc節(jié)數(shù)據(jù)

咨詢個技術(shù)問題,功能目的是從一個pe文件獲取rsrc節(jié)數(shù)據(jù),然后把這個獲取到的數(shù)據(jù)添加到一個沒有rsrc節(jié)的pe文件里,我是這樣修改的,首先從有rsrc節(jié)的pe文件里獲取.rsrc節(jié)的數(shù)據(jù)和rsrc節(jié)頭的VirtualSize,然后在沒有rsrc節(jié)的pe文件添加一個rsrc節(jié)頭和在rsrc節(jié)頭中指定的磁盤位置寫入rsrc數(shù)據(jù),其他節(jié)頭的磁盤位置的信息和VirtualAddress都重新計算無誤,OptionalHeader header中的IMAGE_DATA_DIRECTORY_ARRAY DataDirArray數(shù)組也重新計算了,遇到一個問題只有當(dāng)新增的rsrc節(jié)頭中的VirtualAddress和原本就有rsrc節(jié)頭的pe文件中的rsrc節(jié)頭中的VirtualAddress保持一樣,才能在文件的屬性中查看到版本信息和圖標(biāo)信息等信息,這是什么原因?qū)е碌陌。?/p>

收藏
2條回答
凨少 2023-3-24

pe文件中新增的rsrc節(jié)頭的VirtualAddress需要與原rsrc節(jié)頭在pe文件中的VirtualAddress相同的原因是windows操作系統(tǒng)使用rsrc節(jié)頭虛擬地址來定位資源數(shù)據(jù)。如果 VirtualAddress 不同,操作系統(tǒng)將無法定位資源數(shù)據(jù),版本信息和圖標(biāo)信息將不會顯示在文件屬性中。

回復(fù)
Xiaofeixiang 2023-4-3

在你的修改中,你將原有PE文件中的.rsrc節(jié)數(shù)據(jù)添加到了一個沒有.rsrc節(jié)的PE文件中,并且重新計算了各個節(jié)頭的信息以及OptionalHeader中的IMAGE_DATA_DIRECTORY_ARRAY DataDirArray數(shù)組。

 

你遇到的問題可能是由于以下原因:

 

1.新增的.rsrc節(jié)頭中的VirtualAddress與原有PE文件中的.rsrc節(jié)頭中的VirtualAddress不一致,導(dǎo)致資源數(shù)據(jù)無法正確加載。由于資源目錄表中存儲了資源項的相對偏移,如果新增的.rsrc節(jié)的VirtualAddress改變了,那么相對偏移也會改變,就會導(dǎo)致資源數(shù)據(jù)無法正確加載。

 

2.資源目錄表的結(jié)構(gòu)被修改了。如果你新增的.rsrc節(jié)數(shù)據(jù)中的資源目錄表結(jié)構(gòu)與原有PE文件中的不一致,那么就會導(dǎo)致資源數(shù)據(jù)無法正確加載。資源目錄表結(jié)構(gòu)包括了資源目錄表的數(shù)量、資源項的數(shù)量等等。

 

所以,你需要確保新增的.rsrc節(jié)頭中的VirtualAddress和原有PE文件中的.rsrc節(jié)頭中的VirtualAddress保持一致,并且保證資源目錄表的結(jié)構(gòu)不被修改。你可以使用PE文件編輯器,例如PE Explorer等工具來查看和編輯PE文件中的.rsrc節(jié)數(shù)據(jù),確保你的修改是正確的。

回復(fù)