如何从.so文件中提取C源代码?

时间:2011-05-09 05:55:55

标签: c linux extract decompiling shared-libraries

我正在研究以前开发的软件,源代码编译为linux共享库(.so),源代码不存在。有没有可以从linux共享库中提取源代码的工具?

谢谢, 拉维

5 个答案:

答案 0 :(得分:17)

没有。一旦编译完代码,就不会在二进制文件中留下任何痕迹,只有机器代码。

有些人可能会提到反编译器,但那些没有提取源,他们分析可执行文件并生成一些应该具有与原始文件相同效果的源。

答案 1 :(得分:2)

您可以尝试反汇编目标代码并获取机器代码助记符。

objdump -D --disassembler-options intel sjt.o获取英特尔语法汇编

objdump -D --disassembler-options att sjt.oobjdump -D sjt.o获取AT& T语法汇编

但是原始的源代码永远都找不到。您可以尝试通过研究和重构这些部分来反转该过程。他会痛苦的。

答案 2 :(得分:2)

免责声明:我为Hex-Rays SA工作。

Hex-Rays反编译器是我所知道的唯一一款适用于现实 x86和ARM代码的商用反编译器。确实,你没有获得原始资源,但你得到的东西相当于它。如果你没有剥离你的二进制文件,你甚至可能得到函数名称,或者,幸运的是,甚至类型和局部变量。但是,即使您没有符号信息,也不必坚持第一轮反编译。 Hex-Rays反编译器是交互式 - 您可以重命名任何变量或函数,更改变量类型,创建结构类型以表示原始代码中的结构,添加注释等。通过一点点工作,您可以恢复很多。而且你经常需要的不是整个原始文件,而是一些关键的算法或功能 - 而这种Hex-Rays通常可以提供给你。

查看demo videoscomparison pages。仍然认为“盯着集会”是一回事吗?

答案 3 :(得分:0)

没有。一般来说,这是不可能的。 Source未打包在编译对象或库中。

答案 4 :(得分:-7)

你做不到。但您可以将其作为7-Zip中的存档打开。您可以分别查看每个文件的文件类型和大小。您可以使用自定义文件替换其中的文件。