是否可以重新创建使用给定 .dll/.so/.dylib 所需的 C++ 头文件?
如果是的话,人们将如何去做呢?
一般来说,没有。头文件中有很多在动态库中不可用的信息(结构布局、数字常量等)。
如果库导出“修饰”的 C++ 函数名称,您可能能够恢复一些函数参数信息。但是,即使这样,您也无法获得足够的信息来重建有用的头文件。
如果库导出未修饰的名称(带有extern "C"
),那么您就很不走运了。那时您所知道的只是函数名称。
这称为逆向工程,本身并不是一件容易的事,由于 C++ 名称修改,获取函数名称和参数很容易,但是恢复库使用的枚举、常量和#defines 等其他数据可能有点困难痛苦,因为该数据将嵌入到库的程序集中。
为了扩展 Matias 的答案,逆向工程需要一些不同的知识主题。对于初学者来说,至少基本的组装是必须的。您需要学习越来越多的知识,具体取决于您正在做的事情的复杂性,但至少要了解该语言的基础知识。第二件事是调试。有各种工具可以帮助您,可能在 Windows 上最突出的是 OllyDBG,在 Linux 上我喜欢 EDB 或 Evan 的 Debugger。您需要的最后一件事是一个好的反汇编程序,例如 IDA Pro(价格昂贵,但我相信有免费版本)。如果你真的对逆向工程感兴趣,有很多书籍和在线资源可以学习逆向工程。祝你好运!