我知道這有點遲鈍,但我無法弄清楚。我正在調試這個:grdb不工作變量
xor eax,eax
mov ah,[var1]
mov al,[var2]
call addition
stop: jmp stop
var1: db 5
var2: db 6
addition:
add ah,al
ret
我在地址var1和var2上找到的數字是0x0E和0x07。我知道它沒有分割,但這不是它做這樣的冒險的理由,因爲加法調用工作得很好。你能向我解釋我的錯誤在哪裏?
我看到問題,不知道如何解決它雖然。事情是,由於某種原因,指令指針從0x100開始,所有的段寄存器在0x1628。爲了解決使用的組合的指令,我猜[cs:ip](片段寄存器和指令指針之一)。偏移到Var1爲0x10的(因爲它是爲了在0x10th字節代碼的開頭可能),我試圖檢查內存和我得到的是:
1628:100 8 bytes
1628:108 8 bytes
1628:110 <- wtf? (assume another 8 bytes)
1628:118 ...
什麼招數都存在於存儲器[ cs:var1]指向別處,而不是在我的代碼中,這可能是標籤.data通常用於處理ds的地方....可能..我不知道1628應該是什麼:10
好的,我發現了什麼導致了屁股,並浪費了我整個他媽的一天。上述行爲是正確的,代碼是完全正常的。我不知道的是grdb調試器由於某種原因將開始地址設置爲0x100 ......溶劑是在第一行插入指令ORG 0x100,這就是整個事情。代碼正在工作,因爲指令指針對第一條指令有正確的地址並且一個接一個地執行,但是你的彙編程序不知道你的程序存儲了什麼有效地址,所以它相對於代碼的第一行仍然相當多,這意味着所有變量(如果不使用數據段的標籤)將保持指向,就像它從0x0開始一樣。這當然不適用於DOS。 grdb顯然模擬了一些DOS功能...爲語言而努力,爲每個人努力,希望如果出現同樣的問題,這將會讓別人的時間空餘...
heheh ..至少現在我知道爲什麼要使用.data部分:))))
我不明白「escapade」發生了什麼?你沒有描述這個問題:你看到了什麼你期望的。 – Andrey 2010-03-15 17:18:48
我認爲[var1]和[var2] – Pyjong 2010-03-15 17:21:37
的值爲5和6,所以嘗試var1而不是[var1] – Andrey 2010-03-15 17:25:15