インラインアセンブラで printf を呼び出す

とても簡単なことなんだけど誰も書いてないのでメモ。


char hello[] = "Hello\r\n";

void main()
{
__asm
{
mov eax, offset hello;
push eax;
call dword ptr [printf];
pop ebx;
}
}

DLL 内の関数を呼ぶときには関数名を dword ptr [] で括ればいいらしい。
MessageBoxA もこれで呼べる。ただし MessageBox の場合は呼び出し規約が __stdcall なので pop ebx; は必要ない。