Ⅰ. はじめに
タイトルの通り「Linuxで他プロセスのメモリを読み書きする方法」です。
Windowsの場合はOpenProcessしてプロセスのハンドルを取得した後にReadProcessMemory, WriteProcessMemoryすればOKです。
Ⅱ. サンプルプログラム
メモリを読み書き「される」側(a.cpp)
#include <stdio.h> #include <unistd.h> int main(void) { auto x = 100; while(true) { printf("%p = %d\n", &x, x); sleep(1); } return 0; }
メモリを読み書き「する」側(b.cpp)
#include <sys/uio.h> #include <stdio.h> int main(void) { pid_t pid = 397; int buffer; struct iovec local, remote; local.iov_base = &buffer; local.iov_len = sizeof(int); remote.iov_base = reinterpret_cast<void*>(0x7ffff09c81d4); remote.iov_len = sizeof(int); // 他プロセスのメモリを読む process_vm_readv(pid, &local, 1, &remote, 1, 0); printf("%d\n", buffer); // 他プロセスのメモリに書き込む buffer = 200; process_vm_writev(pid, &local, 1, &remote, 1, 0); // 他プロセスのメモリを読む(2回目) process_vm_readv(pid, &local, 1, &remote, 1, 0); printf("%d\n", buffer); return 0; }
Ⅲ. 実行結果
参考
- process_vm_readv, process_vm_writev
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/process_vm_readv.2.html