qtdszws 发表于 2010-03-25 12:23

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
#
到底哪个是正确的?

EricFisher 发表于 2010-03-25 13:35

file format elf32-i386

vs.

file format elf64-x86-64

qtdszws 发表于 2010-03-25 20:33

搞懂了
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

mik 发表于 2010-03-25 21:52

你看指令描述表是看不清本质的。

要了解本质,必须看 opcode 表


而且,你是混淆了 汇编语言和机器语言


jmp 1---> 这是汇编语言层面

e9 00 00 00 00 ----> 这是机器语言层面
页: [1]
查看完整版本: jmp 1的机器码是多少?