次のプログラムを組み立てようとしています:
.text
.globl _search2
_search2:
pushq %rbp
movq %rsp, %rbp
movq %rax, -8(%rbp)
go_again:
cmpl $0x90909090, (%rax)
je go_out
addq $0x8, %rax
jmp go_again
go_out:
leave
ret
「gcc -o test test.s main.c」と実行すると、次のようになります。
otool -v -t テスト
_search2:
0000000100000d0c pushq %rbp
0000000100000d0d movq %rsp,%rbp
0000000100000d10 movq %rax,0xf8(%rbp)
go_again:
0000000100000d14 cmpl $0x90909090,(%rax)
0000000100000d1a je 0x100000d29
0000000100000d20 addq $0x08,%rax
0000000100000d24 jmp 0x200000d14
go_out:
0000000100000d29 leave
0000000100000d2a ret
jmp は、go_out ラベルでマークされた 0x100000d29 ではなく、完全に間違ったアドレス 0x200000d14 にジャンプしようとしています。
助けてください。