2010-03-01から1ヶ月間の記事一覧

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

ここで使っているのは sprintf ではなく、sprintf_s ですけど。 sprintf_s(char*, size_t, const char*, ...) をインラインアセンブラで直接呼び出そうという話。 lea 命令を使えば文字列バッファのアドレスはいくらでも読み出せるのでらくちん。 void main(…

インラインアセンブラで printf を呼び出す(その2)

ローカル変数のアドレスを動的に解決して printf を呼び出す方法。 lea (Load Effective Address) 命令で実効アドレスを読み込めば良いらしい。掛け算の最適化命令だと思ってたけど、基本的な使い方はこっちなのかな。 void main() { char hello[] = "Hello\…

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

とても簡単なことなんだけど誰も書いてないのでメモ。 char hello[] = "Hello\r\n";void main() { __asm { mov eax, offset hello; push eax; call dword ptr [printf]; pop ebx; } }DLL 内の関数を呼ぶときには関数名を dword ptr [] で括ればいいらしい。 …