linux - 我可以在 Linux 上运行时修改程序的内存吗?

标签 linux memory

<分区>

我知道以下事情:

/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

最佳答案

您使用 ptrace()系统调用。

#include <sys/ptrace.h>
...
ptrace(PTRACE_ATTACH, pid, NULL, NULL); // or PTRACE_SEIZE if you don't want to suspend the process
int data = 4;
ptrace(PTRACE_POKEDATA, pid, 0x83040, &data);

关于linux - 我可以在 Linux 上运行时修改程序的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35642346/

相关文章:

c++ - 如何在 Linux 上使用 C++ 查询 Informix 数据库?使用 C++ 的对象接口(interface)时出现编译器错误

linux - 使用变量作为文件名时 ripMIME 不工作

java - Spring Boot 应用程序关闭

java - Hazelcast keySet 流媒体?

c++ - 将数据插入数据结构时是深拷贝还是浅拷贝?

linux - 在 Linux 中查找具有特定文件大小的文件

linux - 修复docker镜像中的安全漏洞

Java 内存感知缓存

python - 动态数组和删除运算符的 boost::python 内存错误

java - 有趣的内存值