什么可能导致以下程序集执行结果

时间:2012-05-01 19:09:34

标签: aix dbx assembly

我在IBM AIX下使用dbx进行调试。我看到了以下内容:

(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中的内容应该保存到那里 记忆。然后我使用my手动将值分配给该地址 变量:

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

怎么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

我认为,不知何故,这是“飞行员”错误。例如你做了stepi然后显示了std指令?这意味着那是它即将执行的指令 - 而不是它执行的指令 - 至少我认为这是正确的。

我会在之前和之后做一些stepi,并确保我理解stepi正在做什么。当然,打印出iar和iar上的指令,以验证dbx不会对你造成影响。