小编use*_*103的帖子

C++ 获取 64 位应用程序的模块基地址

我最近一直在玩内存读取/编辑,遇到了一个问题,我认为这是由于 64 位应用程序引起的,我也尝试在 64 位下编译。我在 32 位应用程序中使用此脚本没有任何问题,但是当我在 Solitaire 上尝试此操作时,它无法获取基地址,从而无法计算出正确的偏移量等。这是脚本:

#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
using namespace std;

DWORD dwGetModuleBaseAddress(DWORD dwProcessID, TCHAR *lpszModuleName)
{
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
    DWORD dwModuleBaseAddress = 0;
    if (hSnapshot != INVALID_HANDLE_VALUE)
    {
        MODULEENTRY32 ModuleEntry32 = { 0 };
        ModuleEntry32.dwSize = sizeof(MODULEENTRY32);
        if (Module32First(hSnapshot, &ModuleEntry32))
        {
            do
            {
                if (_tcscmp(ModuleEntry32.szModule, lpszModuleName) == 0)
                {
                    dwModuleBaseAddress = (DWORD)ModuleEntry32.modBaseAddr;
                    break;
                }
            } while (Module32Next(hSnapshot, &ModuleEntry32));
        }
        CloseHandle(hSnapshot);
    }
    return dwModuleBaseAddress;
}

int main()
{
    DWORD …
Run Code Online (Sandbox Code Playgroud)

c++ winapi visual-c++

2
推荐指数
1
解决办法
4万
查看次数

标签 统计

c++ ×1

visual-c++ ×1

winapi ×1