jmp 1的机器码是多少?
我觉得应该是 eb ff但是在binutils 2.18中
# echo 'jmp 1'|as -v
GNU assembler version 2.18 (i686-pc-linux-gnu) using BFD version (GNU Binutils) 2.18
# objdump -d a.out
a.out: file format elf32-i386
Disassembly of section .text:
00000000 <.text>:
0: e9 fd ff ff ff jmp 0x2
#
binutils 2.20中
# echo 'jmp 1'|as -v
GNU assembler version 2.20 (x86_64-unknown-linux-gnu) using BFD version (GNU Binutils) 2.20
# objdump -d a.out
a.out: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <.text>:
0: e9 00 00 00 00 jmpq 0x5
#
到底哪个是正确的? file format elf32-i386
vs.
file format elf64-x86-64 搞懂了
jmp 1中的1是绝对地址
因此应该使用
JMP rel32off E9 cd Near jump with the target specified by a 32-bit signed displacement
至于cd值多少跟重定位方式有关
在32位系统上上是
Offset Info Type Sym.ValueSym. Name
0000002400000002 R_386_PC32
64位形体上是
Offset Info Type Sym. Value Sym. Name + Addend
000000000005000000000002 R_X86_64_PC32 fffffffffffffffd 你看指令描述表是看不清本质的。
要了解本质,必须看 opcode 表
而且,你是混淆了 汇编语言和机器语言
jmp 1---> 这是汇编语言层面
e9 00 00 00 00 ----> 这是机器语言层面
页:
[1]