以下代碼執行時會出現記憶體讀寫例外:
.386
.model flat, stdcall
codes segment
start: mov eax, 0123H
codes ends
end start
我把codes segment改為.code就能正確執行了:
.386
.model flat, stdcall
.code
_start: mov eax, 0123H
end _start
請問這是為什么呢?
uj5u.com熱心網友回復:
除了名稱外,沒本質區別吧。至于說執行時出現讀寫例外,第二個恐怕也是一樣的吧,因為它們都是沒有結束程式的操作,通常是 呼叫 ExitProcess() 系統 API 的。uj5u.com熱心網友回復:
這是第一個和第二個除錯運行時的截圖。
uj5u.com熱心網友回復:
第一個:
第二個:
uj5u.com熱心網友回復:
兩圖的區別,就是如何填充剩余區間的問題。第一個,是以 00 填充的,這是資料段的默認方式;第二個則是 0CCh (int3) ,這個是代碼段的;這樣的區別主要和匯編鏈接程式有關吧,我在 masm32v8/v14 及 vc2008 的 link.exe 都沒有給代碼的空隙填上 int3 哪怕給 code 加了 public 'CODE' 的修飾,不知道是不是有什么選擇沒在意啊。uj5u.com熱心網友回復:
masm32 v14?有這個版本嗎uj5u.com熱心網友回復:
我前段時間從 vs2019 里提出來的,有個帖子還談到。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271038.html
標籤:匯編語言
上一篇:pytorch 求導 求解
下一篇:有一個疑問有幫忙解答一下的嗎
