2012-01-07 3 views
3

Я хочу использовать скрипт python в gdb, но у меня есть некоторые вопросы, как я могу позволить этим командам получить перенаправление на мой скрипт python?Использовать команду gdb в python

Я имею в виду, когда я использую «info f», в gdb, он напечатает информацию об информации ebp, eip ... На данный момент я хочу, чтобы эти данные отображались не на экране, а для перенаправления к переменной.

Например, в моем сценарии python есть строка с именем str1, поэтому я хочу str1 = gdb.command («info f»), я пытаюсь сделать несколько способов, но информация будет отображаться на экран, как я могу удалить его с экрана, просто сохранить его в строке?

+0

кто-то знает, как это сделать? Благодаря!!!!! Это назначение, я должен использовать скрипт gdb и python. – user1118486

ответ

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

+0

Вы * делаете * умеете читать документацию, не так ли? –

+0

Да! Спасибо, я только что видел. – user1118486

1

gdb.execute (command [, from_tty [, to_string]]) - это то, что вы (мы: D) ищет. Вы можете посмотреть function decription. Первый аргумент цитируется Команда GDB, вторая я действительно не понимал, полагаю, потому что мне это не нужно, просто держите ее false. И третий определяет, где будет выводиться командный вывод. Если false (по умолчанию), оно будет напечатано, если 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) 
Смежные вопросы