PE檔案中 data節區為什麼VirtualSize會大於SizeOfRawData?

時間 2021-06-02 00:19:51

1樓:

這個VirtualSize的大小是編譯器寫的,也就是說c/c++執行庫需要在節載入到記憶體後提供額外的記憶體寫入資料。msdn只是告訴你載入進記憶體後額外的大小填充0,並沒有什麼矛盾的。

2樓:「已登出」

VirtualSize按照SectionAlignment對齊SizeOfRawData按照FileAlignment對齊節對齊是按照記憶體分頁大小對齊,Win32下最小4K檔案對齊按照檔案系統的最小儲存單位對齊,乙個扇區最小521K大概就這樣吧

你把這個程式執行起來,然後把你覺得比較怪異的節dump出來,dump出來以後進行一下對比看看,看到多出的資料以後,用偵錯程式除錯一下看看,這部分資料是哪來的。

3樓:r00tk1t

首先宣告:VirtualSize是載入到記憶體對齊前的大小,SizeOfRawData是磁碟檔案中對齊後的大小。

用VS15建VC++空專案,預設編譯選項。.data區段和問題中給出的一致。

專案屬性中設定匯出map檔案,會在data段中看到「___dyn_tls_init_callback」等相關符號出現在偏移0x58C(VirtualSize)前方,它們應該是在載入時對映到data段的資料,它們不在磁碟檔案的.data段出現。我對此也不是很了解,應該和載入器有關。

一開始載入到記憶體的時候,SizeOfRawData超出VirtualSize的部分的確是用0填充的,此後應該是由載入器將這些資料寫到了0x200-0x58C位址空間。我用偵錯程式試了一下,當程式未執行前,.data段被裝入記憶體,此時0x200-0x58C內容都是0,而當執行到main入口時,0x200-0x58C之間資料已經被裝載。

另一方面,記憶體對齊的原因使得.data段大小為0x1000。

所以PE中的字段是如何提前安排好這段偏移的,應該和鏈結器有關。

4樓:VeroFess

其實這個問題MSDN已經說過了,戳這裡 PE Format (Windows)

其中VirtualSize是這麼解釋的

The total size of the section when loaded into memory. If this value is greater than SizeOfRawData, the section is zero-padded. This field is valid only for executable images and should be set to zero for object files.

而SizeOfRawData是這麼說的

The size of the section (for object files) or the size of the initialized data on disk (for image files). For executable images, this must be a multiple of FileAlignment from the optional header. If this is less than VirtualSize, the remainder of the section is zero-filled.

Because the SizeOfRawData field is rounded but the VirtualSize field is not, it is possible for SizeOfRawData to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be zero.

Vue 元件 data 為什麼必須是個函式,而 Vue 的根例項卻沒有此限制?

區別就是元件的例項是否共享data 如果返回函式,元件的例項的data 值 都是單獨的,互不影響。如果返回物件,那麼元件的所有例項的data都是同乙份,乙個元件例項的data改了,其他元件的例項的data也會變,因為就是同乙份。 ssh 晨曦時夢見兮 事實上如果元件裡 data 直接寫了乙個物件的話...

為什麼現在中V和日V會成為敵人?

某不知名滄蘿 敵人不至於敵人不至於。確實中V日V有一些矛盾,但在我印象裡這都是五六年前的事情了。後來回坑之後感覺雙方都挺和諧的,也可能是中V湧入大量新人的那幾年貼吧涼了,就漸漸沒人知道當年吵的有多厲害了。現在圈裡都挺和諧,初音出了中文聲庫後也屬於中V了,他們再罵中V總不能把自家公主殿下也罵上吧。這事...

泰劇 《不期而愛》中的宇直Ae為什麼會喜歡Pete?

Sunny愛喝白開水 當然因為天生一對!宇直的人才更喜歡Pete吧,可愛的粘人精,膚白貌美大長腿的豪門小少爺,誰會不喜歡Pete Ae既不傻又不瞎,怎麼會看不到Pete的好?Ae的性格也很圈粉,豪氣雲天,我多長時間沒用這詞形容過角色了。作者刻畫了乙個正直善良果敢的形象,乙個三觀比五官正的人物。軟萌的...