我正在研究以前开发的软件,源代码编译为linux共享库(.so),源代码不存在。有没有可以从linux共享库中提取源代码的工具?
谢谢, 拉维
答案 0 :(得分:17)
没有。一旦编译完代码,就不会在二进制文件中留下任何痕迹,只有机器代码。
有些人可能会提到反编译器,但那些没有提取源,他们分析可执行文件并生成一些应该具有与原始文件相同效果的源。
答案 1 :(得分:2)
您可以尝试反汇编目标代码并获取机器代码助记符。
objdump -D --disassembler-options intel sjt.o
获取英特尔语法汇编
objdump -D --disassembler-options att sjt.o
或objdump -D sjt.o
获取AT& T语法汇编
但是原始的源代码永远都找不到。您可以尝试通过研究和重构这些部分来反转该过程。他会痛苦的。
答案 2 :(得分:2)
免责声明:我为Hex-Rays SA工作。
Hex-Rays反编译器是我所知道的唯一一款适用于现实 x86和ARM代码的商用反编译器。确实,你没有获得原始资源,但你得到的东西相当于它。如果你没有剥离你的二进制文件,你甚至可能得到函数名称,或者,幸运的是,甚至类型和局部变量。但是,即使您没有符号信息,也不必坚持第一轮反编译。 Hex-Rays反编译器是交互式 - 您可以重命名任何变量或函数,更改变量类型,创建结构类型以表示原始代码中的结构,添加注释等。通过一点点工作,您可以恢复很多。而且你经常需要的不是整个原始文件,而是一些关键的算法或功能 - 而这种Hex-Rays通常可以提供给你。
查看demo videos和comparison pages。仍然认为“盯着集会”是一回事吗?
答案 3 :(得分:0)
没有。一般来说,这是不可能的。 Source未打包在编译对象或库中。
答案 4 :(得分:-7)
你做不到。但您可以将其作为7-Zip中的存档打开。您可以分别查看每个文件的文件类型和大小。您可以使用自定义文件替换其中的文件。