rendered paste bodyvoid x86EnumStackFrames(void){
MEMORY_BASIC_INFORMATION minfo;
DWORD stackbase;
DWORD stacktop;
DWORD framebase;
__asm {
mov stacktop, esp
mov framebase, ebp
}
VirtualQuery((LPCVOID)stacktop, &minfo, sizeof(minfo));
stackbase = (DWORD)minfo.AllocationBase;
int framenum = 0;
while(framebase => stackbase && framebase <= stacktop){
DWORD oldframebase = framebase;
framebase = * (DWORD *)(framebase + 4);
if(framebase <= oldframebase){
printf("Invalid stack frame found: %i", framebase);
break;
} else {
printf("Frame %i:\n\tTop:\t%i\n\tBottom:\t%i\n", framenum, oldframebase, framebase);
}
}
}