jay*_*ynp 0 c executable machine-language
我编译以下程序gcc并接收输出可执行文件a.out.:
#include <stdio.h>
int main () {
printf("hello, world\n");
}
Run Code Online (Sandbox Code Playgroud)
当我执行时cat a.out,为什么文件是"乱码"(这叫什么?)而不是0和1的机器语言:
??????? H__PAGEZERO(__TEXT__text__TEXT?`??__stubs__TEXT
P__unwind_info__TEXT]P]__eh_frame__TEXT?H??__DATA__program_vars [continued]
Run Code Online (Sandbox Code Playgroud)
Ada*_*der 11
该文件为0和1,但是当您使用文本编辑器打开它时,这些位按字节分组,然后作为文本处理;)在Linux中,您可以尝试反汇编输出文件以确保它包含机器指令(x86体系结构) :
objdump -D -mi386 a.out
示例输出:
1: 83 ec 08 sub $0x8,%esp
4: be 01 00 00 00 mov $0x1,%esi
9: bf 00 00 00 00 mov $0x0,%edi
Run Code Online (Sandbox Code Playgroud)
第二列包含十六进制表示的0和1,第三列包含助记符汇编程序指令.
如果你想显示那些0和1,只需输入:
xxd -b a.out
示例输出:
0000000: 01111111 01000101 01001100 01000110 00000010 00000001 .ELF..
0000006: 00000001 00000000 00000000 00000000 00000000 00000000 ......
Run Code Online (Sandbox Code Playgroud)