5

我需要编写一些需要在 32 位和 64 位架构之间有所不同的 gdb 宏。我正在寻找一种方法来确定在 gdb 中调试的可执行文件是 32 位还是 64 位。

信息目标包括有关文件类型的信息

例如文件类型 elf32-i386

但这嵌入在更长的输出中。

作为 gdb 宏的新手,我不知道如何处理该输出,或者找到另一种方法来获取它。

拜托,暂时没有python gdb。

4

4 回答 4

3

这是您的解决方案,而不是被python“污染”:

define set-program-arch
    set logging file tmp.gdb
    set logging overwrite on
    set logging redirect on
    set logging on
    set pagination off
    info target
    set pagination on
    set logging off
    set logging redirect off
    set logging overwrite off
    shell echo -n 'set $program_arch="' > tmp2.gdb
    shell grep 'file type' tmp.gdb | sed "s/\.$//g" | cut -d ' ' -f 4 | tr -d '\n' >> tmp2.gdb
    shell echo '"' >> tmp2.gdb
    source tmp2.gdb
    shell rm -f tmp2.tmp tmp.gdb
end

这会将变量program_arch设置为被调试二进制文件的 ELF 类型(例如elf64-x86-64)。享受!

于 2012-09-17T01:45:29.667 回答
2

Python API 示例

frame = gdb.selected_frame()
arch = frame.architecture()
print(arch.name())

示例输出:

  • i386对于 32 位 ELF
  • i386:x86-64对于 64 位 ELF

文档:https ://sourceware.org/gdb/onlinedocs/gdb/Architectures-In-Python.html

在 GDB 7.7.1、Ubuntu 14.04 AMD64 上测试。

于 2015-10-19T19:07:20.730 回答
1

实际上,我发现了一个非常简单的答案

if sizeof(unitptr_t) == 4
  set $arch = 32
else 
  set $arch = 64
end
于 2012-09-13T19:28:09.420 回答
-1

拜托,暂时没有python gdb。

我不相信没有python-gdb你可以实现你想要的,用它来实现你想要的也是微不足道的。所以考虑放宽你的限制。

于 2012-09-11T04:17:06.613 回答