GAS:JMP 指令不正确?
GAS: JMP instruction incorrect?
我有这个汇编代码:
jit_out.s
movq [=10=]x1, %rax
jmp f1
movq [=10=]xf000000101db3fb1, %rsi
push %rsi
movq [=10=]x101db3ed8, %rax
addq , %rsp
ret
f1:
movq [=10=]x101db3fb0, %rax
movq [=10=]x1, %rax
ret
运行 as -v < /dev/null
给出:
Apple Inc version cctools-862, GNU assembler version 1.38
运行 as jit_out.s -o jit_out.o
和 objdump -D jit_out.o
returns:
jit_out.o: file format mach-o-x86-64
Disassembly of section .text:
0000000000000000 <f1-0x26>:
0: 48 c7 c0 01 00 00 00 mov [=12=]x1,%rax
7: e9 00 00 00 00 jmpq c <f1-0x1a>
c: 48 be b1 3f db 01 01 movabs [=12=]xf000000101db3fb1,%rsi
13: 00 00 f0
16: 56 push %rsi
17: 48 b8 d8 3e db 01 01 movabs [=12=]x101db3ed8,%rax
1e: 00 00 00
21: 48 83 c4 08 add [=12=]x8,%rsp
25: c3 retq
0000000000000026 <f1>:
26: 48 b8 b0 3f db 01 01 movabs [=12=]x101db3fb0,%rax
2d: 00 00 00
30: 48 c7 c0 01 00 00 00 mov [=12=]x1,%rax
37: c3 retq
让我困惑的是这一行:
7: e9 00 00 00 00 jmpq c <f1-0x1a>
为什么它跳转到位置 c(下一条指令?)而不是 26,我没看错吗?
原来在 OSX 上使用 as -L
修复了搬迁!
我有这个汇编代码:
jit_out.s
movq [=10=]x1, %rax
jmp f1
movq [=10=]xf000000101db3fb1, %rsi
push %rsi
movq [=10=]x101db3ed8, %rax
addq , %rsp
ret
f1:
movq [=10=]x101db3fb0, %rax
movq [=10=]x1, %rax
ret
运行 as -v < /dev/null
给出:
Apple Inc version cctools-862, GNU assembler version 1.38
运行 as jit_out.s -o jit_out.o
和 objdump -D jit_out.o
returns:
jit_out.o: file format mach-o-x86-64
Disassembly of section .text:
0000000000000000 <f1-0x26>:
0: 48 c7 c0 01 00 00 00 mov [=12=]x1,%rax
7: e9 00 00 00 00 jmpq c <f1-0x1a>
c: 48 be b1 3f db 01 01 movabs [=12=]xf000000101db3fb1,%rsi
13: 00 00 f0
16: 56 push %rsi
17: 48 b8 d8 3e db 01 01 movabs [=12=]x101db3ed8,%rax
1e: 00 00 00
21: 48 83 c4 08 add [=12=]x8,%rsp
25: c3 retq
0000000000000026 <f1>:
26: 48 b8 b0 3f db 01 01 movabs [=12=]x101db3fb0,%rax
2d: 00 00 00
30: 48 c7 c0 01 00 00 00 mov [=12=]x1,%rax
37: c3 retq
让我困惑的是这一行:
7: e9 00 00 00 00 jmpq c <f1-0x1a>
为什么它跳转到位置 c(下一条指令?)而不是 26,我没看错吗?
原来在 OSX 上使用 as -L
修复了搬迁!