为什么EXE不是二进制文件?

时间:2010-03-19 22:42:24

标签: c++ binary executable machine-code

为什么如果你在十六进制编辑器中打开一个EXE,你会看到各种各样的东西。如果计算机只能理解二进制文件,那么文件中只能看到2个可能的符号吗?感谢

8 个答案:

答案 0 :(得分:31)

您将内容与代表混淆。您计算机上的每个文件都可以用二进制(1s和0s)表示,实际上它通常存储在磁盘上(磁性粒子的对齐)或RAM(充电)。

您正在使用“十六进制编辑器”查看您的exe,该编辑器使用hexadecimal numbers表示内容。这样做是因为它比二进制更容易理解和导航十六进制(比较“FA”到“11111010”)。

因此十六进制符号“C0”表示与二进制“11000000”,“C1”==“11000001”,“C2”==“11000010”相同的值,依此类推。

答案 1 :(得分:15)

十六进制值在内存中被解释为二进制值。该软件只会让人类更具可读性。

0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
1010 = 10 A
1011 = 11 B
1100 = 12 C
1101 = 13 D
1110 = 14 E
1111 = 15 F

答案 2 :(得分:7)

计算机只能理解二进制文件,这是一种误解。在最低,最低,最低级别,是的,数字计算机中的数据是一系列的1和0。但是计算机CPU将这些位组合成字节,字,dwords, qwords等。现代CPU处理的基本单位是双字或双字,而不是一点。这就是他们被称为32位或64位处理器的原因。如果你想让它们只使用一个位,你最终会包含31或63个无关位。 (当你开始处理标志寄存器时,它会变得有点模糊。)

数字计算机在8位处理器中确实是自己的,所以十六进制变成了一种非常有用的 display 格式,因为它简洁地表示了两个字符的字节(8位)。您正在使用十六进制编辑器,因此它显示十六进制,并且由于这个早期的字节方向,它每8位显示两个字符。不过,它主要是展示品;虽然文件系统通常在字节粒度上用于实际数据(并且存储分配粒度大得多,几乎总是4k),但它没有理由不能为每16位或每16位字符显示一个字符。或更多)。

答案 3 :(得分:2)

您在屏幕上看到的这个字符A只是由1和0组成的模式。这就是我们所有标准的合作方式,这些标准使得所有的零和零点使得在屏幕上显示的模式变得可以理解。

字符A的值可以是65.在二进制文件中,这是0100 0001,但在屏幕上可能是模式

   ##
  #  #
  ####
  #  #
  #  #

在exe文件中,很多东西以各种格式存储,浮点数,整数和字符串。这些格式经常被使用,因为它们可以直接由计算机直接读取而无需进一步转换。在十六进制编辑器中,您通常可以读取恰好存储在exe文件中的字符串。

在计算机中,一切都是二进制

答案 4 :(得分:1)

文件中的每个字符(字节)代表8位(8个1或0)。你看不到位,你看到字节(和更大的类型)。

答案 5 :(得分:1)

只有两种可能的状态。你所看到的是它们组合的更大模式,就像字母和标点符号所构成的唯一事物一样。

答案 6 :(得分:-1)

所以我将在这里给出一个门外汉的答案。上面其他人建议的是正确的,你可以通过Hex表示读取二进制。无论如何,大多数数据都以圆形字节数保存。例如,有可能是压缩算法计算一些奇数位的压缩表示,但它仍然会将其填充到一个完整的字节以保存它。每个字节可以表示为8位或2个十六进制数字。

但是,这可能不是你所问的。你很可能在里面找到了一些ascii数据 所谓的二进制数据。为什么?好吧,有时代码不只是用于运行。有时 编译器包括一些人类可读数据,可以帮助调试代码 崩溃,你需要访问堆栈跟踪。变量名,行号等等。

不是说我曾经那么做过。我的代码中没有错误。多数民众赞成。

答案 7 :(得分:-2)

不要忘记关于操作系统和磁盘文件系统。他们可能只使用其格式的文件。例如,win32中的可执行文件必须以PE头开头。操作系统加载在存储器和传输控制中,在exutables中分配api-instructions等等......低级指令由CPU执行,因为该级别指令可能已经是一组字节。