// Compile as C code, not C++ #include #include int __cdecl fxn(const char* format, ...) { int r; void* p = NULL; va_list vl; va_start(vl, format); r = vprintf(format, vl); va_end(vl); __asm { mov p, esp } printf("ESP = %X\n", p); return r; } int (__stdcall * pfxn)() = (int(__stdcall*)())&fxn; int main(void) { fxn("Hello world %d!\n", 1); fxn("Hello world %d!\n", 2); fxn("Hello world %d!\n", 3); pfxn("Hello world %d!\n", 4); pfxn("Hello world %d!\n", 5); pfxn("Hello world %d!\n", 6); /* Sample output: Hello world 1! ESP = CFE14 Hello world 2! ESP = CFE14 Hello world 3! ESP = CFE14 Hello world 4! ESP = CFE14 Hello world 5! ESP = CFE0C Hello world 6! ESP = CFE04 */ return 0; }