什么是十六进制编辑器?

What is a hex editor?

十六进制编辑器的用途是什么?它是像 C 还是 Python 这样的编程语言,我如何学习使用它编程?另外,有没有办法用二进制编码?我读了一本关于史蒂夫乔布斯的自传,有一次我认为他的一位同事不得不用二进制编写程序,学习如何做似乎是一件很酷的事情。我没有要解决的现实问题,我只是好奇。我对计算机有非常基本的了解,所以假装你正在向五年级学生解释这个。

大多数可执行文件是系统中的二进制文件。有时检查二进制内容很重要,但读取只有 0 和 1 的大文件是一项非常乏味的任务。这个想法是每个由四个 0 和 1 组成的块可以用一个 十六进制符号 表示:0, 1, 2, 3, 4,5, 6, 7, 8, 9 , A , B, C, D, E, F。十六进制编辑器将有助于读取任何类型的二进制内容(例如文件或网络上的 tcp 帧)。但请注意,即使是十六进制,您也需要具备良好的计算机知识才能理解文件内容。

我们使用的大多数编程语言都是高级语言,因为它们在机器真正识别之前要经过多次翻译。您的 CPU 实际上执行的是非常简单的指令,由 0 和 1 编码,例如加法、逻辑或、将内存地址中的数字加载到寄存器中(以便我们可以添加或操作该值)等。

那么这个翻译是如何工作的呢?好吧,假设您用 C 编写了一个简单的 hello world 程序。它需要在所谓的编译过程中转换为机器代码。在此阶段,您的代码会根据您特定的 CPU 汇编语言翻译成中间语言。这应该是人类可读的机器指令(前面提到的添加、加载等)。然后机器指令被进一步翻译成0和1。

例如,在 MIPS CPU 体系结构中添加如下所示:

0000 0000 0010 0010 0001 1000 0010 0000

基本上就是说,将存储在寄存器 1 和 2 中的值相加,并将结果放入寄存器 3。

这个东西比较长,所以我们一般不写二进制,而是写十六进制。四个0和1压缩成一个数字,我们得到:

00 22 19 20

因此,当您在十六进制编辑器中打开可执行文件时,所有这些值都包含上述指令、静态数据、库等。当您编辑这些值时,假设您知道自己在做什么,就可以更改软件的行为。

但是,您不想用二进制编写程序。这很痛苦。如果您更感兴趣,我建议您查看汇编以及 CPU 的工作原理。

与 C:

相比,用机器代码编写可能有一些优势
  1. 您可以更灵活地处理您可以做的事情。您可以在考虑整个程序的情况下管理您的资源,这样您就可以优化一切。飞机上的一些时间敏感的仪器是用汇编写的。

  2. 您可以全面了解程序的每个部分是如何工作的。

缺点:

  1. 同时记住这么多事情是非常困难的。它很容易出错,而且很难调试。
  2. 非常耗时。您大约有 1/10 的汇编代码编写效率,而机器代码的编写效率更差,因为您需要查找操作代码翻译。
  3. 它不是平台独立的。 Machine 代码符合 CPU 架构,因此您的 windows(x86 架构)代码无法在 Mac 上运行,而 C 程序可以重新编译并且 运行立即。