gdb宏来确定被调试程序的体系结构



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

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

例如文件类型elf32-i386

但是这被嵌入到较长的输出中。

作为gdb宏的新手,我不知道如何处理输出,也不知道如何找到其他方法。

请暂时不要使用python gdb。

Python API示例

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

样本输出:

  • 32位ELF的i386
  • 64位ELF的i386:x86-64

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

在GDB 7.7.1,Ubuntu 14.04 AMD64上测试。

这是您的解决方案,没有被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)。享受

实际上,我找到了一个非常简单的答案:

if sizeof(uintptr_t) == 4
  set $arch = 32
else 
  set $arch = 64
end

请暂时不要使用python gdb。

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

最新更新