【发布时间】:2011-08-21 10:36:39
【问题描述】:
我正在开发以前开发的软件,源代码被编译为 linux 共享库 (.so),源代码不存在。有没有什么工具可以从linux共享库中提取源代码?
谢谢, 拉维
【问题讨论】:
标签: c linux extract decompiling shared-libraries
我正在开发以前开发的软件,源代码被编译为 linux 共享库 (.so),源代码不存在。有没有什么工具可以从linux共享库中提取源代码?
谢谢, 拉维
【问题讨论】:
标签: c linux extract decompiling shared-libraries
没有。一旦你编译了你的代码,二进制文件中就没有它的痕迹,只有机器码。
有些人可能会提到反编译器,但它们不会提取源代码,它们会分析可执行文件并生成一些应该与原始版本具有相同效果的源代码。
【讨论】:
您可以尝试反汇编目标代码并获取机器码助记符。
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 反编译器是我所知道的唯一可与 real-life x86 和 ARM 代码配合使用的商用反编译器。确实,您没有获得原始来源,但是您得到了与之等效的东西。如果您没有剥离二进制文件,您甚至可能会获得函数名称,或者,如果运气好的话,甚至可能获得类型和局部变量。但是,即使您没有符号信息,也不必拘泥于第一轮反编译。 Hex-Rays 反编译器是交互式 - 您可以重命名任何变量或函数、更改变量类型、创建结构类型以表示原始代码中的结构、添加 cmets 等等。通过一点工作,您可以恢复很多。而且很多时候你需要的不是整个原始文件,而是一些关键的算法或函数——而这个 Hex-Rays 通常可以提供给你。
看看demovideos和comparisonpages。还觉得“盯着大会”是一回事吗?
【讨论】:
没有。一般来说,这是不可能的。源代码未打包在已编译的对象或库中。
【讨论】:
你不能。但是您可以在 7-Zip 中将其作为存档打开。您可以在其中分别查看每个文件的文件类型和大小。您可以将其中的文件替换为您的自定义文件。
【讨论】:
.so 吗?
.so 在 Linux 中与 Windows 中的 .dll 相同,您将无法在 WinZip 或 7-zip 或 WinRAR 等解压缩器中打开它