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