Linux可执行文件中使用的代码转换类型

Modified on: Sat, 09 Jun 2018 11:12:53 +0800

我想问一下使用什么类型的编码来制作linux可执行文件,例如十六进制,二进制或其他任何东西。
怎么转换?
有没有办法从这个可执行文件中取回原始代码?

以下是我的一些代码:

ELF���������>�����%|�����@�������������������@�8��@���������������������@�������@�����7<�����7<������� ������������������f�����f���������������������� ������[�UPX!L h�h�8����������?�E�h=��ڊ̓�N� 4���9ISloB�q�w�]ȉ.��,ς��Q䝦����#e��-�N����/�b,���d<��'��-E��6E�s�/�U���ly�V�Y2]"a��S�.�hU�|�S�J�I�2���X} �G0�;���5d�$���.)

这意味着什么?

最佳答案

这是二进制的。源代码已编译完毕。您可以在编辑器中查看它(像bless这样的十六进制编辑器可能会进行更精细的更改),但您确实需要知道自己在做什么。它可能只对改变字符串有用。

对于更多硬核,您可以开始将二进制文件反向工程为汇编代码。这通常被认为是人类可解析的最低级别的计算机语言。

objdump -d helloworld | less

但它也会包含很多编译器废话。例如,如果您编译最简单的helloworld.cpp使用G ++然后objdump它,最终得到226行(208剥离)的yuck。您可以在15行汇编中编写“hello world”,编译它并objdump它仍然开花成166行(剥离)。

如果你对装配很好,这可能会让你有足够的机会了解发生了什么,甚至让你改变它......但是要回答你原来的问题:

您无法将已编译的代码恢复为原始源代码。

对不起。这是一种单向转换,丢失信息(评论,格式化,可读算法概念等),与其他事物静态链接,并且通常以这样的方式进行优化,使得除了最优秀和最有经验的程序员之外的任何事情都无法理解。

为了让您了解问题的严重程度,逆向工程软件的整体构思已经其自己的Stack Exchange站点

作者:Community,Oli

相关问答

添加新评论