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

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


void main()
{
const size_t bufferSize = 64;
char format[] = "%d";
char s[bufferSize];

__asm
{
{
push 270; /* param 4 */
lea eax, format;
push eax; /* param 3 */
push bufferSize; /* param 2 */
lea eax, s;
push eax; /* param 1 */
call dword ptr [sprintf_s];
add esp, 16;
}
{
lea eax, s;
push eax; /* param 1 */
call dword ptr [puts];
add esp, 4;
}
}
}