int global_a = 2; void exewrite (void) { global_a = 1; } extern void dllwrite (void); int _stdcall testexe_main (void* p1, void *p2, char* p3, int p4) { dllwrite (); /* We can't print or assert in a minimal app like this, so use the return status to indicate if global_a ended up with the correct expected value. */ return 1 - global_a; } /* We have to import something, anything at all, from kernel32, in order to have the thread and process base thunk routines loaded when we start running!. */ extern __attribute((dllimport)) void _stdcall Sleep (unsigned int duration); int _stdcall testexe_dummy (unsigned int foobar) { Sleep (foobar); }