我知道以下事情:
/proc/$pid/mem (memory struct of this program)
/proc/$pid/maps
通常,我使用gdb,例如:
$ gdb --pid [pid]
(gdb) set {int}0x83040 = 4
首先,我想也许gdb打开/ proc / $ pid / mem文件并更新它, 所以我做了一个测试...我使用带有sudo权限的vim打开这个文件,但我仍然无法更新/ proc / $ pid / men文件。
有人能告诉我如何在Linux上运行时更新另一个程序的内存吗?我可以更新哪个系统文件?
我的ptrace代码:
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int pid = 23587;
// int ret = ptrace(PTRACE_SEIZE, pid, NULL, NULL); // or PTRACE_SEIZE if you don't want to suspend the process
// printf("%d\n", ret);
int data = 100;
int res = ptrace(PTRACE_POKEDATA, pid, 999999, &data);
printf("%d\n", res);
printf("123\n");
perror("Error: ");
return 0;
}
但我得到了消息
$ sudo ./aa
-1
123
Error: : No such process