クラッシュが発生しました。調査中に、次のコードによって完全にブロックされていることがわかりました。
0000000000000a00 <_IO_vfprintf>:
a00: 55 push %rbp
a01: 48 89 e5 mov %rsp,%rbp
a04: 41 57 push %r15
a06: 41 56 push %r14
a08: 41 55 push %r13
a0a: 41 54 push %r12
a0c: 53 push %rbx
a0d: 48 81 ec 48 06 00 00 sub $0x648,%rsp
a14: 48 89 95 98 f9 ff ff mov %rdx,0xfffffffffffff998(%rbp)
これはobjdump --disassemble /usr/lib64/libc.a
、64 ビット Linux x86 システムで実行し、出力を検索することによって生成されます。これはAT&T の構文なので、宛先は右側にあります。
具体的には、最後の指示がわかりません。rdx
関数がそのレジスタに触れる前に、レジスタの値をスタックのどこか(遠く、遠く)にメモリに書き込んでいるようです。私には、これは意味がありません。
私は呼び出し規約を読んでみましたが、私の最良の理論はrdx
、パラメーターに使用されているため、コードは基本的にパラメーター値を直接「返す」ことです。これは関数の終わりではないので、もちろん実際には戻りません。