inject-bundle プロジェクトからコピーされた c ファイルの asm 関数は次のとおりです。
asm void mach_thread_trampoline(void)
{
// Call _pthread_set_self with pthread_t arg already on stack
pop eax
call eax
add esp, 4
// Call cthread_set_self with pthread_t arg already on stack
pop eax
call eax
add esp, 4
// Call function with return address and arguments already on stack
pop eax
jmp eax
}
gcc の後 (私は mac os x lion 10.7.4 で作業を行います):
$gcc -m32 -fasm-blocks -oa ac -g
gdb をターゲットにして、gdb の mach_thread_trampoline の内容を確認します。
(gdb) x/17i mach_thread_trampoline
0x1f80 <mach_thread_trampoline>: pop %eax
0x1f81 <mach_thread_trampoline+1>: call *%eax
0x1f83 <mach_thread_trampoline+3>: mov %esp,%eax
0x1f85 <mach_thread_trampoline+5>: mov %eax,%esp
0x1f87 <mach_thread_trampoline+7>: add $0x4,%esp
0x1f8a <mach_thread_trampoline+10>: mov %esp,%eax
0x1f8c <mach_thread_trampoline+12>: mov %eax,-0x8(%ebp)
0x1f8f <mach_thread_trampoline+15>: pop %eax
0x1f90 <mach_thread_trampoline+16>: call *%eax
0x1f92 <mach_thread_trampoline+18>: mov %esp,%eax
0x1f94 <mach_thread_trampoline+20>: mov %eax,%esp
0x1f96 <mach_thread_trampoline+22>: add $0x4,%esp
0x1f99 <mach_thread_trampoline+25>: mov %esp,%eax
0x1f9b <mach_thread_trampoline+27>: mov %eax,-0x8(%ebp)
0x1f9e <mach_thread_trampoline+30>: pop %eax
0x1f9f <mach_thread_trampoline+31>: jmp *%eax
0x1fa1 <mach_thread_trampoline+33>: ret
ターゲットは、mach_thread_trampoline 関数のいくつかの命令を追加しました。
asm 関数を変更しないようにする方法はありますか?