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; // 目标进程句柄

  • 相关阅读:
    Cs Round#54 E Late Edges
    Cs Round#54 D Spanning Trees
    python装饰器的理解
    java序列化,二进制和数据流
    netty的理解
    CenterOS卸载和安装MYSQL
    oracle的一些问题
    tomcat优化方案(转)
    Selector
    Buffer
  • 原文地址:https://www.cnblogs.com/cody1988/p/2166678.html
Copyright © 2011-2022 走看看