gpt4 book ai didi

c++ - 有没有办法找出我的操作系统在我的 RAM 中的位置?

转载 作者:行者123 更新时间:2023-12-01 13:51:12 26 4
gpt4 key购买 nike

我想知道 C 或 C++ 是否有办法找到操作系统在 RAM 中的运行位置并释放该位置。我知道我可以使用 free() 来释放内存位置。我想知道是否可以通过释放操作系统的 RAM 空间来关闭计算机。

最佳答案

之前 protected memory你可以使用它的 physical address 访问任何内存。并操纵它。这就是 DOS 和基于 DOS 的 Windows(Windows 95 之前,如 3.1)的工作方式。
protected 内存或虚拟化内存意味着您可以执行诸如将部分内存交换到磁盘之类的操作,实际上是假装拥有比计算机实际拥有的更多的内存。内存块可以根据需要进行交换、调入和调出,而正在运行的程序并不明智。这些地址都是虚拟的,或者说是“假的”,因为它们实际上并不存在,但就 CPU 而言,它们是真实的,并且完全按照您的预期工作,通过集成的 Memory Management Unit 完成。 (MMU) 在 CPU 中。
在 protected 内存之后,您的“用户空间”程序不再看到物理内存地址,而是操作系统本身管理的虚拟地址。在 Intel 类型的系统上,操作系统的核心内核在一个特殊的 protection ring 中运行。防止用户程序直接访问或操作内存。
任何多用户系统都必须实现这种内存和内核保护,否则将无法阻止一个用户访问另一个用户进程的内存。
在内核中没有传统意义上的“malloc”或“free”,内核有自己特殊的分配机制。这些与传统的 malloc() 完全不同。和 free() C 标准库中的函数,并且不以任何方式相互兼容。每个内核,无论是 Linux、BSD 还是 Windows 或其他内核,都以不同的方式执行此操作,即使它们都可以支持使用完全相同 malloc() 的用户空间代码。功能。
您应该无法通过简单的内存分配调用使系统崩溃。如果可以,恭喜,您发现了一个漏洞,应该记录它并将其转发给相关方以进行进一步分析。请记住,这种事情经过大量研究,因此您偶然发现的可能性非常低。比赛如 pwn2own显示绕过所有这些安全性所涉及的工作量。
同样重要的是要记住操作系统不一定位于固定位置。 Address Space Layout Randomization是一种对各种函数和数据的地址进行打乱的技术,以确保漏洞利用不能使用硬编码值。在这很常见之前,您可以预测各种事物将存在于内存中的位置并通过一个小错误进行盲目操作,但现在这变得更加困难,因为您不仅必须找到一个可以操纵的漏洞,而且还要找到另一个首先发现地址的漏洞.
话虽如此,C 或 C++ 在“能力”方面并没有什么特别之处,这使得它能够做其他语言无法做到的事情。任何能够与操作系统功能绑定(bind)的程序在控制方面都具有相同的等效“权力”。这包括 Python、Perl、Ruby、Node.js、C# 以及其他可以绑定(bind)到 C 库并进行任意函数调用的长长的列表。
人们用最方便的任何语言对“漏洞利用”进行原型(prototype)设计,通常是 Perl 或 Python,就像 C 一样。这真的取决于你想要完成什么。一些错误一旦被发现,很容易重现,您可以使用浏览器 JavaScript 等普通的东西来重现,就像 Row Hammer 的情况一样。 .

关于c++ - 有没有办法找出我的操作系统在我的 RAM 中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62900279/

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