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的執行緒相關聯。這個記憶體結構針對每個執...