Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何编译汇编代码,以便可以看到它的十六进制字节代码?_Linux_Assembly_X86 - Fatal编程技术网

Linux 如何编译汇编代码,以便可以看到它的十六进制字节代码?

Linux 如何编译汇编代码,以便可以看到它的十六进制字节代码?,linux,assembly,x86,Linux,Assembly,X86,我有一个名为exit.s的简单汇编代码文件,如下所示: .text .globl _start _start: xor %eax, %eax mov %al, 1 xor %ebx, %ebx 我想得到这个的十六进制字节码。在linux机器上如何执行此操作?我将使用哪些命令?使用gcc将其编译为可执行文件,然后使用objdump-d打印代码: gcc -c -o my_file.o my_file.s objdump -d my_file.o

我有一个名为exit.s的简单汇编代码文件,如下所示:

.text
.globl _start
_start:
        xor %eax, %eax
        mov %al, 1
        xor %ebx, %ebx

我想得到这个的十六进制字节码。在linux机器上如何执行此操作?我将使用哪些命令?

使用
gcc
将其编译为可执行文件,然后使用
objdump-d
打印代码:

gcc -c -o my_file.o my_file.s
objdump -d my_file.o

使用
gcc
将其编译为可执行文件,然后使用
objdump-d
打印代码:

gcc -c -o my_file.o my_file.s
objdump -d my_file.o

这里的主要问题是您需要一个十六进制编辑器或查看器。你可以找到很多免费的

组装文件后,将有一个输出文件,通常为ELF格式,这意味着文件开头的头中有额外的信息。通过使用
oformat
标志,您可以告诉
ld
创建一个只有汇编指令的平面二进制文件:

$ld file.o -oformat binary

然后,如果使用十六进制编辑器打开生成的可执行文件,您将看到汇编程序生成的机器代码。

这里的主要内容是您需要一个十六进制编辑器或查看器。你可以找到很多免费的

组装文件后,将有一个输出文件,通常为ELF格式,这意味着文件开头的头中有额外的信息。通过使用
oformat
标志,您可以告诉
ld
创建一个只有汇编指令的平面二进制文件:

$ld file.o -oformat binary

然后,如果使用十六进制编辑器打开生成的可执行文件,您将看到汇编程序生成的机器代码。

当我尝试使用gcc编译它时,我得到了一系列错误,例如
/tmp/ccLqYN5a.o:In function
\u start':(.text+0x0):多个
\u start'/usr/bin/ld:/usr/lib/debug/usr/lib/crt1.o的定义(.debug_info):重定位0具有无效的符号索引11
,仅用于构建对象文件,而不尝试创建完整的可执行文件。当我尝试使用gcc编译它时,我收到一系列错误,例如
/tmp/ccLqYN5a.o:In function
\u start':(.text+0x0):多个
\u start'/usr/bin/ld:/usr/lib/debug/usr/lib/crt1.o的定义(.debug_info):重新定位0具有无效的符号索引11
,只能生成对象文件,而不能尝试创建完整的可执行文件。