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

Rav*_*avi 16 c linux decompiling extract shared-libraries

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

谢谢,拉维

cni*_*tar 16

没有.编译代码后,二进制文件中没有剩余的痕迹,只有机器代码.

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

  • 反编译器产生了一些非常糟糕的代码.变量名称毫无意义,没有有用的注释.你不妨盯着集会. (4认同)

pho*_*xis 6

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

objdump -D --disassembler-options intel sjt.o 获取 Intel 语法汇编

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

但原始的源代码永远无法找到。您可以尝试通过研究和重建这些部分来扭转该过程。那将是地狱般的痛苦。


Igo*_*sky 5

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

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

观看演示 视频比较 页面。还认为“盯着集会”是一回事吗?

  • 我可以使用 Hex-Rays 反编译器的试用版吗 (2认同)