【问题标题】:Contents of executable files cannot be copied?无法复制可执行文件的内容?
【发布时间】:2017-02-11 10:09:50
【问题描述】:

因此,可以通过将原始文件的内容复制到空白文本文件中来将文本文件复制并粘贴到另一个位置。这可以通过文本编辑器完成。高亮文本文件内容,复制,新建空白文本文件,粘贴进去。

但是,为什么不能像这样复制粘贴图片、音频、视频、可执行文件等呢?例如,我用文本编辑器打开一个可执行文件,复制它的所有内容,创建一个新的空白文本文件,将扩展名更改为 .exe,然后粘贴到其中(通过文本编辑器)。但是,该文件无法运行。为什么?

另外,我希望能够像编辑文本文件一样编辑这些类型的文件。有什么办法吗?

【问题讨论】:

  • 因为您使用的文本编辑器仅显示可打印字符,或将不可打印字符替换为空格、矩形或其他乱码。复制此文件时,您正在复制文件的损坏表示。您需要在十六进制编辑器中打开二进制文件(这就是它们的名称)。 (然后也粘贴到十六进制编辑器中。)
  • @AndrewCheong 哇!感谢您的信息!

标签: character-encoding exe executable copy-paste


【解决方案1】:

因为可执行文件和媒体文件是“二进制”文件。文本文件也是二进制文件,但不同。所有文件都是二进制文件,但有些文件比其他文件更二进制。

您正在文本编辑器中打开一个二进制文件。这立即改变了字节的语义。主要问题是包含一个值的字节,如果它是一个文本文件(0x0A0x0D),它将被呈现为一个依赖于平台的换行符(\r\n 在 Windows 上,例如)。当您复制它时,您已将 0x0A0x0D 更改为 0x0D 0x0A

然后是控制字符或不可打印字符。并非0x000xFF 之间的所有字节都可以表示为一个字符。它们将被省略或替换为可显示的字符。

因此,当您复制包含这些内容的文本时,它们将被忽略或以其他方式损坏。

总结:你不能可靠地使用文本来显示所有可能的字节值,除非你选择对字节的值进行编码,例如使用 Base64 编码。

如果您想编辑二进制文件,请使用能够识别这些字节的编辑器:“十六进制编辑器”。请注意,更改二进制文件中的随机字节值并不能保证该文件的完整性:格式中可能内置了校验和,您的编辑将使该校验和无效。

【讨论】:

  • 所以我需要一个十六进制编辑器!非常感谢。只是另一个问题。为什么可执行文件的内容不是0s和1s? CPU不就是这么理解的吗?
  • 每个文件的内容由1和0组成。这只是一个代表问题。您愿意阅读0b010000010x4165 还是A
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2021-08-05
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多