2012-05-01 10 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があなたにフィブリッシングしていないことを確認してください。