我正在处理以前开发的软件,源代码编译为Linux共享库(.so),但没有源代码。是否有工具可以从Linux共享库中提取源代码?
谢谢, Ravi
我正在处理以前开发的软件,源代码编译为Linux共享库(.so),但没有源代码。是否有工具可以从Linux共享库中提取源代码?
谢谢, Ravi
没有。一旦你编译你的代码,源代码就不会留在二进制文件中,只有机器码。
一些人可能会提到反编译器,但它们并不能提取源代码,它们分析可执行文件并生成一些与原始代码具有相同效果的源代码。
objdump -D --disassembler-options intel sjt.o
获取Intel语法汇编。objdump -D --disassembler-options att sjt.o
或objdump -D sjt.o
获取AT&T语法汇编。免责声明:我是Hex-Rays SA的员工。
Hex-Rays反编译器是我所知道唯一能够很好地处理实际x86和ARM代码的商业化反编译器。虽然你不能得到原始源代码,但你可以获得等效的东西。如果你没有剥离二进制文件,你甚至可能得到函数名,或者有些时候还能得到类型和局部变量。不过,即使你没有符号信息,你也不必坚持第一轮反编译结果。Hex-Rays反编译器是交互式的——你可以重命名任何变量或函数,改变变量类型,创建结构类型以表示原始代码中的结构,添加注释等等。稍加努力,你就可以恢复很多信息。而且往往你所需要的并不是整个原始文件,而是一些关键的算法或函数——这正是Hex-Rays通常可以为你提供的。
不行。一般来说,这是不可能的。源代码没有打包在编译后的对象或库中。
你不能这样做。但是你可以在7-Zip中将其打开作为一个存档文件。在那里,你可以单独查看每个文件的文件类型和大小。你可以用自定义文件替换其中的文件。
.so
文件? - devnull.so
与Windows中的.dll
相同,您将无法在类似WinZip、7-zip或WinRAR之类的解压缩程序中打开它。 - SSpoke