zoukankan      html  css  js  c++  java
  • 一个获取目标进程首地址的方法

    在头文件里加入下面code:

    #include <windows.h> 
    #include <tlhelp32.h> 

    在Cpp文件里加入例如以下的函数。该函数可用于获取目标进程首地址:

    (注意AfxMessageBox定义在afxwin.h, 若非在MFC中使用请酌情更改)

    //获取目标进程首地址
    BOOL CImageBloodDlg::getProcessAddr(DWORD dwPID, DWORD& baseAddr)
    {
    	HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
    	MODULEENTRY32 me32;
    
    	// 在目标进程中获取全部进程的snapshot
    	hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
    	if (hModuleSnap == INVALID_HANDLE_VALUE)
    	{
    		AfxMessageBox(_T("CreateToolhelp32Snapshot (of modules) fail"));
    		return(FALSE);
    	}
    
    	// 设置MODULEENTRY32数据结构大小字段
    	me32.dwSize = sizeof(MODULEENTRY32);
    
    	//检索第一个模块的信息。不成功则返回
    	if (!Module32First(hModuleSnap, &me32))
    	{
    		AfxMessageBox(_T("Module32First fail")); // 显示调用失败
    		CloseHandle(hModuleSnap);    // 清除句柄对象
    		return(FALSE);
    	}
    
    	// 从me32中得到基址
    	baseAddr = (DWORD)me32.modBaseAddr;
    
    	// 别忘了最后清除模块句柄对象
    	CloseHandle(hModuleSnap);
    	return(TRUE);
    }

    调用该函数就可以获取目标进程的首地址。

  • 相关阅读:
    Screen Space Soft Shadows
    立体涂鸦的草图渲染
    什么是Civil3D
    Visual Studio 和 .NET Framework
    编程语言的选择
    Civil3D二次开发能做些什么
    Civil3D二次开发Cookbook
    Civil3D跟AutoCAD是什么关系
    C#启示录:尝鲜版
    Thinking In DesignPattern
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6900246.html
Copyright © 2011-2022 走看看