2010-04-24 27 views
1

我對此感到困惑;我不認爲在這兩種情況下應該有任何差異 ,該程序結束爲exe文件。 如果你認爲一個不同請幫助....彙編:從C調用或創建爲獨立程序時的數據段

讓我澄清我的問題: 是有數據段定義或者當我創建一個彙編程序「獨立」,當之間的差異處理
我要求從C程序的程序集?

誰在兩種情況下定義日期段的位置或大小? 這是編譯器還是操作系統? 以及在兩種情況下如何確定數據段的值?

+1

你需要使這個問題更清楚。 – 2010-04-24 15:11:07

+0

我清除了我的問題 – aristotaly 2010-04-24 17:20:25

回答

0

取決於操作系統!

如果我們正在尋找IA32操作系統下則API儲備虛擬內存地址的一些應用和空間窗口:

  • CS段,指向 程序或代碼存儲器的開始。
  • DS段,指向變量或數據存儲器的起始點 。
  • SS段,指向 堆棧內存的開始,與DS相同。
  • ES作爲額外的段通常在 用於字符串傳輸指令 (lodsb,stosw,...),並且與DS相同。
  • FS作爲另一個額外的片段點 在OS內核數據,如Win32 Thread Information Block
  • GS作爲另一個額外的段是 0作爲已加載應用程序的已分配虛擬內存地址空間的開始。

通過FS段訪問 '的Win32線程信息塊' 的Exsample:

function GetThreadId: integer; 
//result := GetCurrentThreadId; 
asm 
    mov eax, fs:[$18]  //eax := thread information block 
    mov eax, [eax + $24] //eax := thread id 
end; { GetThreadId } 

也陶錫源:x86 memory segmentation