2011-05-23 67 views
5

如何訪問當前調試實例中的cpu寄存器?從gdb你可以調用例如printf "0x%x", $eaxset $eax_b = $eax是否還有一種方法可以通過python支持gdb提供?或者我應該創建一個Python函數,這個函數可以調用像save-reg "eax" $eax這樣的函數,它將寄存器存儲在我希望存儲的數組中?如何在gdb中使用python訪問寄存器

另一方面,與gdb腳本,你也可以set $eax = 1000例如,這我也想從一個python腳本,而不是一個gdb腳本。

回答

8

我不相信了Python API來GDB提供直接訪問寄存器,但是這取決於你想用它做什麼,你可以通過與gdb.execute()評估gdb命令訪問它,或者評估"$eax"表達與gdb.parse_and_eval()

(gdb) p $rbx 
$23 = 140737488348072 
(gdb) python print type(gdb.parse_and_eval("$rbx")), gdb.parse_and_eval("$rbx") 
<type 'gdb.Value'> 140737488348072 

(該例子是在gdb提示,但gdb模塊不處於GDB執行的其他代碼的任何不同)

+0

我不認爲這是在有乙醚,但是這會做我猜的詭計!謝謝! – DipSwitch 2011-05-23 23:42:45

+2

好吧,'parse_and_eval'真的是嵌入到GDB中的任何Python代碼的主力。沒有任何其他的方式,因爲那裏的方式已經工作:) – 2011-05-23 23:54:53

+0

@ThomasWouters我沒有得到它:s如何選擇的答案解釋使用python做下面的事情? 'set $ eax = 1000' – microMolvi 2013-07-03 04:45:21

相關問題