据我了解,编译器会生成一个由 CPU 可以读取的 1 和 0 组成的二进制文件。我有一个二进制文件,但如何打开它来查看其中的 1 和 0?文本编辑器说无法打开它......
PS 我有一个汇编编译的二进制文件,它应该是 1 和 0 的纯二进制代码?
答案1
答案2
很多人都回答了这个问题的某些方面,但不是全部。
计算机上的所有文件都存储为 1 和 0。图像、文本文件、音乐、可执行应用程序、目标文件等。
它们都是0和1。唯一的区别是,根据打开它们的内容,对它们的解释有所不同。
当您使用查看文本文件时cat
,可执行文件(cat
在本例中)会读取所有 1 和 0,并通过将它们转换为相关字母或语言中的字符来将它们呈现给您。
当您使用图像查看器查看文件时,它会根据文件的格式和一些逻辑来将所有 1 和 0 转换为图像。
编译后的二进制文件没有什么不同,它们存储为 1 和 0。
arzyfex 的答案为您提供了以不同方式查看这些文件的工具,但是以二进制形式读取文件适用于计算机上的任何文件,就像以八进制、十六进制或 ASCII 形式查看文件一样,它可能在每种情况下都没有意义这些格式。
如果您想了解可执行二进制文件的用途,则需要以显示汇编语言(作为开始)的方式查看它,您可以使用以下命令来查看它:
objdump -d /path/to/binary
这是一个反汇编程序,它获取二进制内容并将其转换回汇编程序(这是一种非常低级的编程语言)。 objdump
并不总是默认安装,因此可能需要根据您的 Linux 环境进行安装。
一些外部阅读。
注意:正如@Wildcard 指出的那样,重要的是要注意这些文件不包含人物1 和 0(如您在屏幕上看到的那样),它们包含实际的数字数据,即打开 (1) 或关闭 (0) 的各个信息位。即使这样的描述也只是事实的近似值。关键点是,如果您确实找到了显示 1 和 0 的查看器,即使它仍在解释文件中的数据,然后显示 0 和 1 的 ASCII 字符。数据以二进制格式存储(请参阅上面的二进制数链接)。 Pierre-Olivier 的社区 wiki 条目更详细地介绍了这一点。
答案3
在低级别,文件是编码的作为 0 和 1 的序列。
但即使是程序员在实践中也很少去那里。
第一的(比这个 0 和 1 的故事更重要),你必须明白计算机操作的任何东西都是用数字。
使用字符集表用数字对字符进行编码。例如,使用 ASCII 编码时,字母“A”的值为 65。看http://www.asciitable.com
一个像素用一个或多个数字进行编码(有很多图形格式)例如,在标准三色格式中,黄色像素编码为:255 表示红色,255 表示绿色,0 表示蓝色。看http://www.quackit.com/css/css_color_codes.cfm(选择颜色并查看 R、G 和 B 单元格)
二进制可执行文件是用Assembly编写的;每个汇编指令都被编码为数字。例如,汇编指令
MOVB $0x61,%al
由两个数字编码:176,97 参见http://www.sparksandflames.com/files/x86InstructionChart.html(每条指令都有一个从00到FF的关联编号,因为使用了十六进制表示法,见下文)
第二:每个数字可以有多个陈述或者符号。
假设我有 23 个苹果。
- 如果我将 10 个苹果分成一组,我将得到:2 组 10 个苹果和 3 个单独的苹果。这正是我们写 23 时的意思:先写 2(十),然后写 3(个)。
但我也可以做 16 个苹果一组。所以我会得到一个 16 人组和 7 个单独的苹果。在十六进制符号(这就是所谓的 16 基数),我会写:17 (16 + 7)。为了与十进制表示法区别,十六进制表示法一般用前缀或后缀表示:17h、#17 或 $17。但是如何表示超过 9 个 Group-of-16,或者更多的 9 个单独苹果呢?简单地说,我们使用从 A (10) 到 F (15) 的字母。数字 31(如 31 个苹果)在十六进制中写为 #1F。
在同一条线上,我们可以做两个苹果组。 (以及两个苹果组,即 2x2 苹果组,依此类推)。那么23就是:1组2x2x2x2苹果,0组2x2x2苹果,1组2x2苹果,1组2个苹果,以及1个单独的苹果,用二进制表示为10111。
(看https://en.wikipedia.org/wiki/Radix)
从物理上讲,允许两种状态(切换)的机制很容易实现,在磁盘上和内存存储中也是如此。
这就是为什么数据和程序被视为数字,以二进制形式编写和操作。
然后根据数据类型翻译成适当的形式(字母 A,黄色像素)或执行(MOV 指令)。
hexdump
列出以十六进制形式编码数据(或汇编程序)的数字。然后可以使用计算器得到相应的二进制形式。
答案4
您可以在十六进制编辑器中打开它,该编辑器将其显示为一系列十六进制值。xxd file
你想达到什么目的?