All pastes #605081 Raw Edit

Someone

public text v1 · immutable
·published 2007-07-05 22:54 UTC
rendered paste body
void 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);
	}
   }
}