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
    图解MotionEvent中getRawX、getRawY与getX、getY以及View中的getScrollX、getScrollY
    ListView分栏--制作分栏音乐列表
    Android中Touch事件的传递机制
    Android进程间通信之使用AIDL
    Android进程间通信之使用Messenger
    Android Mms之短信接收流程--从Framework到App
    Android组件的使用:ListView、GridView
    Android组件的使用:AutoCompleteTextView、Spinner
    Android组件的使用:DatePicker,TimePicker
  • 原文地址:https://www.cnblogs.com/cody1988/p/2166678.html
Copyright © 2011-2022 走看看