我正在尝试创建一个 python 脚本,它将反汇编一个二进制文件(准确地说是一个 Windows exe)并分析它的代码。我需要能够获取某个缓冲区,并提取某种结构,其中包含有关其中指令的信息。
我以前在 C 中使用过 libdisasm,我发现它的界面非常直观和舒适。问题是,它的 Python 接口只能通过 SWIG 使用,我无法让它在 Windows 下正确编译。
在可用性方面,diStorm 提供了一个很好的开箱即用接口,但它只提供每条指令的助记符,而不是一个二进制结构,其中包含定义指令类型的枚举等等。这对我的目的来说非常不舒服,并且需要花费大量时间来包装界面以使其符合我的需求。
我还查看了 BeaEngine,它实际上提供了我需要的输出,一个包含有关每条指令的二进制信息的结构,但它的接口非常奇怪且违反直觉,并且当提供错误的参数时它会立即崩溃。CTypes 会导致你的 python 崩溃。
因此,我很高兴听到其他解决方案,这些解决方案比使用 djgcc 或 mingw 来制作 SWIGed libdisasm 或为 diStorm 编写 OOP 包装器所花费的时间要少一些。如果有人对如何编译 SWIGed libdisasm 或更好的编译二进制文件(pyd 或 dll+py)有一些指导,我很想听听/拥有它。:)
提前谢谢。