我正在研究一个实用程序,它需要将十六进制地址解析为二进制内的符号函数名和源代码行号.该实用程序将在x86上的Linux上运行,但它分析的二进制文件将用于基于MIPS的嵌入式系统.MIPS二进制文件采用ELF格式,使用DWARF作为符号调试信息.
我目前正计划派生objdump,传入十六进制地址列表并解析输出以获取函数名称和源行号.我已经编译了一个支持MIPS二进制文件的objdump,它正在工作.
我更喜欢有一个软件包,允许我从Python代码本地查找内容而不需要另外的进程.我在python.org上找不到libdwarf,libelf或libbfd,也没有提到dwarfstd.org上的python.
某处有合适的模块吗?
我有一个用C++编写的程序,在Linux上,用-g编译.
当我在gdb下运行它时,我可以
1) set breakpoints
2) at those breakpoints, print out variables
3) see the stackframe
4) given a variable that's a structure, print out parts of the structure (i.e. how ddd displays information).
Run Code Online (Sandbox Code Playgroud)
现在,鉴于我的程序是用"-g"编译的 - 无论如何,我可以在我的程序中访问这个功能吗?
即我的程序是用"-g"编译的,有一些
std::vector<string> getStackFrame();
Run Code Online (Sandbox Code Playgroud)
我可以调用函数来获取当前执行点的堆栈帧吗?
给定指向对象的指针及其类型......我能做到吗?
std :: vector getClassMember(class_name);
?
我意识到默认答案是"不,C++不支持这种内省级别" - 但是,回想一下我在linux上,我的程序是用"-g"编译的,而gdb可以做到这一点,所以显然是信息在那儿.问题是:是否有一些用于访问它的API?
编辑:PS Naysers,我很想看到关闭这个问题的理由.
所以我正在尝试使用 Python 为学校项目编写一个基本的反汇编程序。我正在使用 pydasm 和 capstone 库。我不明白的是如何使用 Python 实际访问程序的汇编指令。这些库允许我反汇编指令,但我不知道如何在 Python 中访问程序的指令。有人能给我一些指导吗?
谢谢。