Я пытаюсь прочитать адрес возврата метода, но из другой памяти.поэтому я получаю указатель кадра и читаю значение возвращаемого значения.Насколько я понимаю, я должен получить значение, равное m_stackframe.AddrReturn.Offset, но:
- Если я добавлю Esp к адресу указателя кадра - ReadProcessMemory вернет false.
- Если я просто использую смещение кадра адреса - я получаю неправильное значение.
//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);
Я использую c ++ в Windows.Кто-нибудь может сказать мне, что с ним не так?спасибо:)