assembly和c中的stack, heap使用

2022-03-07 03:13:34 字數 1137 閱讀 4649

1在沒有作業系統時候寫assembly的時候,stack的使用是很直接的,申請一塊空間,並且在使用pop,push之前將esp賦值為stack空間的最高位址,直接彙編成純的可執行**就行。

2  可是當在寫有作業系統的assembly**時候,需要按照作業系統中的assembly格式書寫。並將assembly彙編成os中指定的可執行檔案的格式,才能夠正確執行,因為在現在的作業系統中,執行這段彙編**的時候已經是在保護模式中了。

3  在寫c**的時候也是乙個道理,在作業系統上執行c程式的時候,不妨以linux的elf檔案為例,若為可執行檔案的時候,檔案中不包括stack空間。stack段是在載入進作業系統時候,系統動態分配的一塊空間。只要在程式執行之前將esp的值設定好就可以了。

4   如果不在系統上執行程式,即不呼叫任何系統的庫函式的程式,不妨假設彙編將由c寫的elf格式的程式載入進記憶體,那麼需要這段彙編**負責在記憶體中空出那麼一塊空間當做c程式的stack空間,即這段彙編**負責將esp的值設定好。

小知識:

編譯、連線、重定位(不論是鏈結時重定位還是載入時重定位)對於全域性變數、區域性變數、函式名的對待方式的不同?

小知識:

heap到底是個啥東西?

the operating system owns and manages the unused memory, andit is collectively known as

下面是執行時候記憶體情況

os executable codes

os global variables

os stack space

---------------------------

perhaps some free space

--------------------------

--------------------------------

perhaps some free space

-----------------------------------

there are free spaces between different segments.

C 反射的Assembly的簡單應用

反射 reflection 是.net中的重要機制,通過反射,可以在執行時獲得.net中每乙個型別 包括類 結構 委託 介面和列舉等 的成員,包括方法 屬性 事件,以及建構函式等。還可以獲得每個成員的名稱 限定符和引數等。有了反射,即可對每乙個型別瞭如指掌。如果獲得了建構函式的資訊,即可直接建立物件...

C 反射的Assembly的簡單應用

反射 reflection 是.net中的重要機制,通過反射,可以在執行時獲得.net中每乙個型別 包括類 結構 委託 介面和列舉等 的成員,包括方法 屬性 事件,以及建構函式等。還可以獲得每個成員的名稱 限定符和引數等。有了反射,即可對每乙個型別瞭如指掌。如果獲得了建構函式的資訊,即可直接建立物件...

STA和MTA執行緒模式的區別

sta和mta執行緒模式的區別 摘錄 by 饅頭販子 發表於 2010 5 20 14 36 00 sta single thread apartment,中文叫單執行緒套間。就是在com庫初始化的時候建立乙個記憶體結構,然後讓它和呼叫coinitialize的執行緒相關聯。這個記憶體結構針對每個執...