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

时间:2012-09-10 22:08:01

标签: gdb

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

info target包含有关文件类型的信息

e.g。文件类型elf32-i386

但这是嵌入更长的输出。

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

请暂时不要使用python gdb。

4 个答案:

答案 0 :(得分: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 )。享受!

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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上测试。

答案 3 :(得分:-1)

  

请暂时不要使用python gdb。

我不相信你可以在没有python-gdb的情况下实现你想要的东西,并且琐碎来实现你想要的东西。所以考虑放宽你的限制。