All pastes #605306 Raw Edit

Someone

public text v1 · immutable
·published 2007-07-06 02:40 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;
   printf("%X\n%X", stacktop, stackbase);
   while(framebase >= stacktop && stackbase <= framebase){
	DWORD oldframebase = framebase;
	framebase = * (DWORD *)(framebase);
	if(framebase <= oldframebase){
	   printf("Invalid stack frame found: %i", framebase);
	   break;
	} else {
	   DWORD retaddr = * (PDWORD)(4 + oldframebase);
	   printf("Frame %i:\n\n\tTop:\t%X\n\tBottom:\t%X\n\nReturn Address:\t%X\n\n", framenum, oldframebase, framebase, retaddr);
	}
	framenum++;
   }
}