gpt4 book ai didi

c - 如何从内核空间读取用户进程地址?

转载 作者:行者123 更新时间:2023-11-30 15:44:23 25 4
gpt4 key购买 nike

实际上,我正在研究 QNX。在内核空间中的某个时刻,当一个进程想要向另一个进程发送消息并且这两个进程都被阻塞时,我可以获得每个进程的堆栈指针和帧指针的值。

接下来,我想访问每个进程的堆栈,但我的问题是这些值(sp 和 fp)是在用户进程中有效的虚拟地址。我如何从内核空间中的这些用户地址读取单词?

最佳答案

除非您是 QNX 雇用的内核开发人员,否则您的代码永远不会在“内核空间”中运行。只有内核和进程 1(QNX 称之为“proc”,pidin 显示为 procnto 或 procnto-instr)在“内核空间”中运行,您无法修改其中任何一个。

如果你想调试进程,那么你可以使用 gdb 连接到它们并检查它们的内存内容。您可以在不知道虚拟 sp 指向的内存的物理地址的情况下执行此操作。

如果你想从另一个程序读取内存,那么你可以这样做:

fd = open("/proc/PID/as", O_RDONLY);
lseek(fd, virtual_address_to_read, SEEK_SET);
read(fd, buffer, cnt_bytes_to_read);

QNX 在以下位置对此进行了记录: http://www.qnx.com/developers/docs/6.5.0_sp1/index.jsp?topic=%2Fcom.qnx.doc.neutrino_prog%2Fprocess.html&cp=13_7_3_4_1&anchor=Address_space

关于c - 如何从内核空间读取用户进程地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19498908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com