Linux 如何编译汇编代码,以便可以看到它的十六进制字节代码?
我有一个名为exit.s的简单汇编代码文件,如下所示: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
.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
,只能生成对象文件,而不能尝试创建完整的可执行文件。