如何查看机器码?
How to view machine code?
我用汇编语言(at&t 语法)编写了一个程序,我想看看机器代码的外观。这就是我获取可执行代码的方式:
as -g -o p1.o p1.s --32 -gstabs
ld -o p1 p1.o -m elf_i386
假设您在 Linux 或 BSD 平台上(基于您正在使用 as
的事实),您可能想尝试 objdump
.
objdump -d <binary file>
将反汇编目标文件,在左侧显示机器代码十六进制字节,在右侧显示反汇编的匹配汇编助记符。这是一个例子:
$ objdump -d factorial
factorial: file format elf64-x86-64
Disassembly of section .init:
00000000004003f0 :
4003f0: 48 83 ec 08 sub [=10=]x8,%rsp
4003f4: e8 73 00 00 00 callq 40046c
..
Disassembly of section .plt:
0000000000400408 :
400408: ff 35 e2 0b 20 00 pushq 0x200be2(%rip) # 600ff0
40040e: ff 25 e4 0b 20 00 jmpq *0x200be4(%rip) # 600ff8
400414: 0f 1f 40 00 nopl 0x0(%rax)
objdump
是 Linux 平台上 binutils
软件包的一部分。
我用汇编语言(at&t 语法)编写了一个程序,我想看看机器代码的外观。这就是我获取可执行代码的方式:
as -g -o p1.o p1.s --32 -gstabs
ld -o p1 p1.o -m elf_i386
假设您在 Linux 或 BSD 平台上(基于您正在使用 as
的事实),您可能想尝试 objdump
.
objdump -d <binary file>
将反汇编目标文件,在左侧显示机器代码十六进制字节,在右侧显示反汇编的匹配汇编助记符。这是一个例子:
$ objdump -d factorial
factorial: file format elf64-x86-64
Disassembly of section .init:
00000000004003f0 :
4003f0: 48 83 ec 08 sub [=10=]x8,%rsp
4003f4: e8 73 00 00 00 callq 40046c
..
Disassembly of section .plt:
0000000000400408 :
400408: ff 35 e2 0b 20 00 pushq 0x200be2(%rip) # 600ff0
40040e: ff 25 e4 0b 20 00 jmpq *0x200be4(%rip) # 600ff8
400414: 0f 1f 40 00 nopl 0x0(%rax)
objdump
是 Linux 平台上 binutils
软件包的一部分。