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/

相关文章:

python - 使用 subprocess 模块访问无密码 SSH 设备

C - 函数返回指向函数的指针

C++ STL 分配器与运算符 new

c++ - 64 位 Windows 上应用程序可用的最大内存是多少

c - 为什么要无限期地等待 - timerfd_create?我哪里出错了?

linux - Perl 正则表达式递归替换多个文件组中的字符串,如 "*.php" "*.html"

linux - 编写 Linux 终端模拟器

macos - 我在 ASM 中的 strdup

assembly - ARM 程序集中带 [] 和不带 [] 的命令之间的区别

linux - 如何在 Linux 上获取中断向量号?