J'essaie de lire l'adresse de retour de la méthode mais d'une autre mémoire. donc je reçois le pointeur de trame, et lire la valeur de la valeur de retour. Pour autant que je comprends que je suis censé avoir une valeur égale à m_stackframe.AddrReturn.Offset, mais:callstack et ReadProcessMemory
- Si j'ajoute l'Esp à l'adresse de pointeur de trame - ReadProcessMemory retourne false.
- Si j'utilise simplement le décalage de trame d'adresse - j'ai une mauvaise valeur.
//Reading the top method in the stack. bool ok = StackWalk64(IMAGE_FILE_MACHINE_I386,m_processInfo.Handle ,m_threadInfo.Handle, &m_stackframe,&m_threadContext, 0,SymFunctionTableAccess64,SymGetModuleBase64,0); // the Esp register is the base address of the stack, right? DWORD baseAddressOfCallstack = m_threadContext.Esp; // Getting the absolute address by adding the ESP to the stack frame address. DWORD absoluteAddressInCallstack = m_stackframe.AddrFrame.Offset + baseAddressOfCallstack ; // Converting it to a pointer. DWORD* addressInCallStack = (DWORD*)absoluteAddressInCallstack; DWORD val = 0; SIZE_T bytesRead = 0; // and trying to read it from the process... ok = ReadProcessMemory(m_processInfo.Handle, addressInCallStack, (void*)&val, sizeof(DWORD),&bytesRead);
J'utilise C++ sur Windows. quelqu'un peut-il me dire ce qui ne va pas avec? merci :)