zoukankan      html  css  js  c++  java
  • windows编程点滴(三)之Windows一个进程读取另一个进程的内存

    读写另一个进程内存的函数:

    BOOL ReadProcessMemory(

    HANDLE hProcess, // 待读进程的句柄

    LPCVOID lpBaseAddress, // 目标进程中待读内存的起始地址

    LPVOID lpBuffer, // 用来接受读取数据的缓冲区

    DWORD nSize, // 要读取的字节数

    LPDWORD lpNumberOfBytesRead // 用来供函数返回实际读取的字节数

    );

    WriteProcessMemory( hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead); // 参数含义同上

    不同操作系统方法不一样,获取操作系统版本的函数:

    BOOL GetVersionEx(LPOSVERSIONINFO lpVersionInfo);

    系统会将操作系统的版本信息返回到参数lpVersionInfo 指向的OSVERSIONINFO结构中。

    typedef struct _OSVERSIONINFO {

    DWORD dwOSVersionInfoSize; // 本结构的大小,必须在调用之前设置

    DWORD dwMajorVersion; // 操作系统的主版本号

    DWORD dwMinorVersion; // 操作系统的次版本号

    DWORD dwBuildNumber; // 操作系统的编译版本号

    DWORD dwPlatformId; // 操作系统平台。可以是VER_PLATFORM_WIN32_NT2000 系列)等

    TCHAR szCSDVersion[128]; // 指定安装在系统上的最新服务包,例如“Service Pack 3”等

    } OSVERSIONINFO;

    在查找时目标进程内存中很可能存在多个你要搜索的值,所以在进行第一次搜索的时候,要把搜索

    到的地址记录下来,然后让用户改变要搜索的值,再在记录的地址中搜索,直到搜索到的地址

    惟一为止。为此写两个辅助函数和个全局变量。

    BOOL FindFirst(DWORD dwValue); // 在目标进程空间进行第一次查找

    BOOL FindNext(DWORD dwValue); // 在目标进程地址空间进行第234⋯⋯次查找

    DWORD g_arList[1024]; // 地址列表

    int g_nListCnt; // 有效地址的个数

    HANDLE g_hProcess; // 目标进程句柄

  • 相关阅读:
    Java实现 LeetCode 69 x的平方根
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 66 加一
    Java实现 LeetCode 66 加一
    CxSkinButton按钮皮肤类
  • 原文地址:https://www.cnblogs.com/cody1988/p/2166678.html
Copyright © 2011-2022 走看看