2012-01-07 42 views
3

我想在gdb中使用python腳本,但我有一些問題,我該如何讓這些命令重定向到我的python腳本?在python中使用gdb命令

我的意思是,當我使用「信息f」時,在gdb中,它將打印關於ebp,eip信息的信息...現在,我想讓這些信息不顯示在屏幕上,但要重定向變量。

例如,在我的python腳本中,有一個名爲「str1」的字符串,所以我想str1 = gdb.command(「info f」),我嘗試了一些方法,但信息會顯示在屏幕上,我怎樣才能從屏幕上刪除它,只需將它存儲在一個字符串?

+0

是否有人知道做到這一點的呢?謝謝!!!!!這是一項任務,我必須使用gdb和python腳本。 – user1118486 2012-01-07 23:18:52

回答

2

下面是一個例子:

(gdb) info frame 
Stack level 0, frame at 0x7fffffffd960: 
rip = 0x7ffff7dec680 in *__GI__dl_debug_state (dl-debug.c:77); saved rip 0x7ffff7de0731 
called by frame at 0x7fffffffdab0 
source language c. 
Arglist at 0x7fffffffd950, args: 
Locals at 0x7fffffffd950, Previous frame's sp is 0x7fffffffd960 
Saved registers: 
    rip at 0x7fffffffd958 

(gdb) python str1 = gdb.execute("info frame", False, True) 
(gdb) python print str1 
Stack level 0, frame at 0x7fffffffd960: 
rip = 0x7ffff7dec680 in *__GI__dl_debug_state (dl-debug.c:77); saved rip 0x7ffff7de0731 
called by frame at 0x7fffffffdab0 
source language c. 
Arglist at 0x7fffffffd950, args: 
Locals at 0x7fffffffd950, Previous frame's sp is 0x7fffffffd960 
Saved registers: 
    rip at 0x7fffffffd958 

文檔here

+0

HOHO,這就是我想要的!那麼,功能中的「Flase」和「True」如何呢?謝謝!! – user1118486 2012-01-07 23:21:34

+0

你*知道如何閱讀文檔,對嗎? – 2012-01-07 23:27:02

+0

是的!謝謝,我剛看到它。 – user1118486 2012-01-07 23:38:57

1

gdb.execute (command [, from_tty [, to_string]])是什麼你(我們:D)尋求。你可以看看function decription。第一個參數是引用GDB命令,第二個我沒有真正理解,我想因​​爲我不需要它,只是保留它虛假。第三個決定命令輸出將在哪裏傳輸。如果(默認),它只是要打印,如果true,輸出將被包裝爲字符串並返回給您,因此您可以將其分配給一個變量。

一個例子:

(gdb) py MyVar = gdb.execute("info f",False,True) 
(gdb) py print(MyVar) 
Stack level 0, frame at 0x7fffffffdda0: 
rip = 0x4006a6 in [email protected]; saved rip 0x4007b9 
called by frame at 0x7fffffffddc0 
Arglist at 0x7fffffffdd90, args: 
Locals at 0x7fffffffdd90, Previous frame's sp is 0x7fffffffdda0 
Saved registers: 
    rip at 0x7fffffffdd98 

(gdb) 

您還可能有興趣在gdb.parse_and_eval (expression)。它提供了使用所謂舒適變量GDB一個簡單的方法:

(gdb) set $MyVar = "PinkyPie is the best!" 
(gdb) pi 
>>> MyStr = gdb.parse_and_eval("$MyVar") 
>>> print(MyStr) 
"PinkyPie is the best!" 
>>> 
(gdb)