gpt4 book ai didi

python - gdb python : How to redirect the output of a gdb command to a variable?

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:02 25 4
gpt4 key购买 nike

我正在使用 RHEL 5.3 操作系统、gdb 7.5 和 python 2.7。我正在用 Python 编写脚本来自动执行一些 gdb 调试步骤。我们可以将以下命令(“name1”)的输出存储到变量中吗?

(gdb) p *(ptr->name)
$13 = "name1"

我想这样做是因为在我的 Python 脚本中我会将此 (name1) 与用户输入的字符串进行比较,如果匹配,将执行一些操作,否则要求用户输入另一个字符串。

如果不可能,请给我建议。

最佳答案

在 GDB 中获取表达式的值是 gdb.parse_and_eval() 的用途。我想你想要这样的东西:

name1.c :

#include <string.h>
#include <stdio.h>

/* https://github.com/scottt/debugbreak */
#include <debugbreak/debugbreak.h>

struct T {
char *name;
};

int main()
{
struct T t, *p = &t;
t.name = strdup("name1");
debug_break();
printf("%s\n", p->name);
return 0;
}

输入名称.py :

import gdb

gdb.execute('set python print-stack full')
gdb.execute('set confirm off')
gdb.execute('file name1')
gdb.execute('run')

name_in_program = gdb.parse_and_eval('p->name').string()
gdb.write('Please input name: ')
name = raw_input()
while name != name_in_program:
gdb.write('Please try another name: ')
name = raw_input()

gdb.execute('quit')

示例 session :

$ gdb -q -x input-name.py

Program received signal SIGTRAP, Trace/breakpoint trap.
main () at name1.c:16
16 printf("%s\n", p->name);
Please input name: nameX
Please try another name: name1

$

请注意,我采用了通过 debug_break() 在我的 C 代码中插入陷阱指令来闯入调试器的捷径。您可能想要设置一个断点。

关于python - gdb python : How to redirect the output of a gdb command to a variable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16697657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com