【问题标题】:gdb macro to determine the architecture of debugged programgdb 宏确定被调试程序的架构
【发布时间】:2017-11-23 06:25:47
【问题描述】:

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

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

例如文件类型 elf32-i386

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

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

请暂时不要使用python gdb。

【问题讨论】:

    标签: gdb


    【解决方案1】:

    这是您的解决方案,而不是被 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)。享受吧!

    【讨论】:

    • 非常好,谢谢。它还回答了如何处理 gdb 输出的一般问题。
    【解决方案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 上测试。

    【讨论】:

      【解决方案3】:

      其实我找到了一个非常简单的答案

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

      【讨论】:

      • 您找到了与您提出的问题不同的问题的答案。祝你好运使用这种方法区分 elf32-i386 和 elf32-ppc。
      • unitptr_t 不是错字吗?那不应该是uint 而不是unit 吗?另外,你为什么用sizeof(uintptr_t) 而不是sizeof(void *) 甚至sizeof(unsigned int *)?后者可能更适用于 C、C++ 和 Objective-C,而不仅仅是包含 <stdint.h> 的 C++11 和 C99。
      【解决方案4】:

      请暂时不要使用python gdb。

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

      【讨论】:

      • 好吧,来个python例子怎么样?
      猜你喜欢
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 2012-01-05
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      相关资源
      最近更新 更多