访问Linux 2.6.x下的任何内存位置

w3b*_*ard 1 linux memory assembly kernel

我在x86机器上使用Slackware 12.2.我试图通过转储特定的内存部分来调试/弄清楚事情.不幸的是,我对Linux内核的了解非常局限于编程/测试所需的内容.

所以这是我的问题:有没有办法访问内存中的任何一点?我尝试使用char指针执行此操作,以便它只有一个字节长.然而,该程序崩溃并吐出了一些性质:"无法访问内存位置".现在我指向0x00000000位置,系统存储它的中断向量(除非改变了),这实际上并不重要.

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

好吧,那是我长篇大论的独白.基本上我的问题是:"有没有办法实现这一目标?".

无论如何...

JSB*_*ոգչ 5

如果您的程序在用户模式下运行,那么您的进程内存外部的内存将无法通过钩子或骗子访问.使用asm无济于事,任何其他方法也无济于事.这根本不可能,并且是在受保护模式下运行的任何操作系统的核心安全性/稳定性功能(即所有操作系统,在过去20多年中).以下是Linux内核内存管理的简要概述.

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