KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am in the process of porting an application from x86 to x64. I am using Visual Studio 2009; most of the code is C++ and some portions are plain C. The __asm keyword is not supported when compiling towards x64 and our application contains a few portions of inline assembler. I did not write this code so I don't know exactly what et is supposed to do: int CallStackSize() { DWORD Frame; PDWORD pFrame; __asm { mov EAX, EBP mov Frame, EAX } pFrame = (PDWORD)Frame; /*... do stuff with pFrame here*/ } EBP is the base pointer to the stack of the current function. Is there some way to obtain the stack pointer without using inline asm? I have been looking at the intrinsics that Microsoft offers as a substitute for inline asm but I could not find anything that gave me something usefull. Any ideas? Andreas asked what stuff is done with pFrame. Here is the complete function: int CallStackSize(DWORD frameEBP = 0) { DWORD pc; int tmpint = 0; DWORD Frame; PDWORD pFrame, pPrevFrame; if(!frameEBP) // No frame supplied. Use current. { __asm { mov EAX, EBP mov Frame, EAX } } else Frame = frameEBP; pFrame = (PDWORD)Frame; do { pc = pFrame[1]; pPrevFrame = pFrame; pFrame = (PDWORD)pFrame[0]; // precede to next higher frame on stack if ((DWORD)pFrame & 3) // Frame pointer must be aligned on a DWORD boundary. Bail if not so. break; if (pFrame <= pPrevFrame) break; // Can two DWORDs be read from the supposed frame address? if(IsBadWritePtr(pFrame, sizeof(PVOID)*2)) break; tmpint++; } while (true); return tmpint; } The variable pc is not used. It looks like this function walks down the stack until it fails. It assumes that it can't read outside the applicat
Tags (comma-separated)
Save Edits
Cancel