我有一个名为exit.s一个简单的汇编代码文件看起来像以下:如何编译汇编代码以便我可以看到它的十六进制字节代码?
.text
.globl _start
_start:
xor %eax, %eax
mov %al, 1
xor %ebx, %ebx
我想获得的这个十六进制字节码。我如何在Linux机器上执行此操作?我会使用什么命令?
我有一个名为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
这里最主要的是,你需要一个十六进制编辑器或浏览器。有很多免费的,你可以找到。
组装完文件后,您将获得一个输出文件,通常采用ELF格式,这意味着文件起始处的标题中有额外的信息。你可以告诉ld
使用oformat
标志创建具有只是汇编指令平坦的二进制文件:
$ld file.o -oformat binary
然后,如果你打开生成的可执行文件用十六进制编辑器,你会看到机器代码的汇编程序生成。
当我尝试编译使用gcc我得到了一堆错误,如'/tmp/ccLqYN5a.o的那样:在功能'_start ': (+的.text为0x0):'_start的多个定义' 的/ usr/bin/ld:/usr/lib/debug/usr/lib/crt1.o(.debug_info):重新定位0具有无效的符号索引11' – Nosrettap 2012-03-31 23:16:22
尝试编辑后的版本。 – 2012-03-31 23:17:25
谢谢,这工作。 -c是什么意思? – Nosrettap 2012-03-31 23:18:42