2012-05-01 56 views
1

我正在使用dbx在IBM AIX下進行調試。我看到以下內容:什麼可能導致以下程序集執行結果

(dbx) print $r4 
0x00000001614aa050 
(dbx) print *((int64*)0x00000001614aa050) 
-1 
(dbx) print $r3 
0x0000000165e08468 
Then I "stepi" my 64bit program which executed the following instruction: 
std r3,0x0(r4) 

然後我立即檢查該內存的內容:

(dbx) print *((int64*)0x00000001614aa050) 
-1 

還是-1?我期待在$ r3中的內容應該保存到那個內存中 。我然後手動指定值來使用我 變量地址:

(dbx) print &bmc._pLong 
0x00000001614aa050 
(dbx) assign bmc._pLong=(int64 *)0x0000000165e08468 
(dbx) print *((int64*)0x00000001614aa050) 
6004180072 (which is 0x0000000165e08468) 

怎麼可能發生呢?

回答

0

我假設,不知何故,這是「試點」錯誤。例如你做了stepi然後顯示std指令?這意味着這是它即將執行的指令 - 而不是它執行的指令 - 至少我認爲這是正確的。

我會做一些stepi的前後,並確保我瞭解stepi在做什麼。當然,打印出iar和iar上的說明,以驗證dbx不會影響你。

相關問題