
Untitled
By: a guest on
Aug 6th, 2012 | syntax:
C | size: 0.80 KB | hits: 27 | expires: Never
// Compile as C code, not C++
#include <stdio.h>
#include <stdarg.h>
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;
}