2012-01-17 49 views
0

我試圖在運行時分配程序內存的方式以及程序的不同部分或「段」(如果這是正確的話)。我幾乎在那裏,但並不完全,可以使用一點幫助。程序內存分配

我知道該程序包含一個.data節,對於初始化的全局變量,只讀和讀寫內存。我知道.bss部分用於未初始化的全局變量和靜態變量,並且是可讀寫的。我瞭解堆和堆棧。

以下幾個問題說明我的困惑:

  1. 什麼是.RODATA部分,其中是否存在?
  2. .data如何? MASM中的段與.data段不同?
  3. 是否每個程序都必須具有標準的.data,.bss,.code部分, 或者這些約定是否只是指導原則?
  4. 什麼決定哪些部分是可讀,可寫和可執行的?

任何幫助將不勝感激。

回答

2
  1. .rodata只讀數據,又名常量和文字,看到this

  2. 根據this.data?是用於未初始化的數據,又名.bss截面數據,.data是用於初始化數據。

  3. 根據Windows PE format,您永遠不能假定某些節存在並且它們的順序(因爲它們聲明它是編譯器定義的)。然而,其相當標準有.data.code,但仍然,你應該總是檢查PE,這就是爲什麼它存在。

  4. 這是通過PE節頭完成的,因此它是OS特定的(或PE具體:取勝,小精靈或Mach-O的),參見上部分here段落,特別是部分描述符的Characteristics字段(再次,這是爲Windows 只有,您需要使用您選擇的操作系統的PE佈局)。