如何为已经在 OSX 中编译的二进制文件编写头文件?

问题描述

如果我缺少 .dylib/.a/.so 文件的头文件,有没有办法找出我可以链接函数,然后自己编写头文件

我问的是 OSX,因为用于对象检查的工具略有不同。

解决方法

使用 otool 相当简单。

https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CodeFootprint/Articles/MachOOverview.html#:~:text=Mach%2DO%20is%20the%20native,file%20are%20read%20into%20memory

它是 MachO 二进制文件的 __text 部分,用于保存可链接的代码。

这样就可以像这样在 OSX 中以二进制形式打印出所有函数。

otool -t libpython3.8.a -v

使用 -t 表示 __text 部分,使用 -v 进行反汇编。

会输出类似的东西

__PyDict_Pop:
0000000000003300    pushq   %rbp
0000000000003301    movq    %rsp,%rbp
... assembly ...
... ret value...
0000000000004614    popq    %rbp
0000000000004615    retq
0000000000004616    nopw    %cs:(%rax,%rax)