linux - 在 Linux 2.6.x 下访问任何内存位置

标签 linux memory assembly kernel

我在 x86 机器上使用 Slackware 12.2。我正在尝试通过转储特定的内存部分来调试/找出问题。不幸的是,我对 Linux 内核的了解非常局限于编程/渗透测试所需的知识。

所以这是我的问题:有没有办法访问内存中的任何点?我试着用一个字符指针来做这件事,这样它就只有一个字节长。然而,程序崩溃了,并吐出一些具有这种性质的东西:“无法访问内存位置”。现在我指着 0x00000000 位置,系统存储它的中断向量(除非它改变了),这应该无关紧要。

现在我的理解是内核将内存(数据、堆栈、堆等)分配给一个程序,并且该程序将无法去任何其他地方。所以我在考虑使用 NASM 来告诉 CPU 直接获取我需要的东西,但我不确定这是否可行(我需要弄清楚如何将 MASM 转换为 NASM)。

好吧,这是我冗长的独白。基本上我的问题是:“有没有办法实现这个目标?”。

无论如何...

最佳答案

如果您的程序在用户模式下运行,那么您的进程内存之外的内存将无法通过 Hook 或骗子访问。使用 asm 无济于事,任何其他方法也无济于事。这是根本不可能的,并且是任何以保护模式运行的操作系统(即过去 20 多年的所有操作系统)的核心安全/稳定性功能。 Here's a brief overview of Linux kernel memory management.

探索计算机整个内存空间的唯一方法是使用内核调试器,它允许您访问任何物理地址。然而,即使这样也不能让您同时查看每个进程 的内存,因为某些进程将被换出主内存。此外,即使在内核模式下,物理地址也不一定与进程可见的地址相同。

关于linux - 在 Linux 2.6.x 下访问任何内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3239291/

相关文章:

c++ - linux交叉编译和动态库/链接

c - 重新分配失败

c - 即使 Proc 分配的内存少于 ulimit 限制的内存,它也会崩溃

encryption - 为 16 位系统编写 RC4

macos - 为什么我的 x86 链表函数会抛出段错误?

linux - ssh 的记录

c - dlopen:是否可以捕获未解析的符号, "manually"在它们发生时解析它们?

c - 如何在内存中的特定位置分配内存(C编程)?

c - 为什么编译器不在堆栈上分配和释放具有 "sub*"和 "add*"的局部变量?

linux - 当从 Linux 服务器中的 sqlplus 插入时,Windows-1252 (80-9F) 控制字符在 oracle db 中插入为 �