gcc汇编到十六进制

时间:2014-03-05 20:27:42

标签: assembly hex objdump

对于实验室,我需要知道我写的汇编的十六进制指令。例如,我有bang.s

movl 0xaaaaaaaa 0xbbbbbbbb
push 0xcccccccc
ret

现在我想获得这些指令的十六进制代码。如何使用cc和/或objdump来完成此操作?

我试过了:

objdump -S bang.s

但我得到“文件格式无法识别”

2 个答案:

答案 0 :(得分:5)

这就是我的所作所为。

1. Compile the assembly file.
2. Disassemble the object file (objdump -d objFile.o > objFile.asm)

在上面的示例中,它不必是目标文件。它可能是一个可执行文件。

有时,我只需知道字节序列或两条指令。在这种情况下,我使用以下内容。

1. In my .bashrc file (Linux), add the lines ...

opcode32() {
  echo $* > tmp.S && gcc -c tmp.S -o tmp.o && objdump -d tmp.o
  rm -f tmp.o tmp.S
}

2. From the command line, use opcode32 'instruction'.  For example ...
       opcode32 'pushl %ecx'
   This yields the following output ...

tmp.o:     file format elf32-i386


Disassembly of section .text:

00000000 <.text>:
   0:   51                      push   %ecx

希望这有帮助。

答案 1 :(得分:3)

首先需要编译(汇编).s文件,然后在生成的.o文件上运行objdump。

cc或gcc通常知道如何构建汇编文件,所以:

cc -c bang.s
objdump -d bang.o

(当然,你的dump.s必须是有效的程序集,所以你可以构建它,你在这里发布的不是)