问题标签 [memory-segmentation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
522 浏览

assembly - 如何设置LDT?

我一直在开发 32 位操作系统,我希望允许程序将段与内核分开。

为此,我需要创建 SS,并且 DS 寄存器实际上指向程序堆栈和 .data 部分。

根据我的研究,我相信这是通过建立一个本地描述符表来完成的。

我假设这与 GDT 非常相似,并且 LDT 是通过 lldt 加载的。

但是,一旦设置了细分,我就不知道如何使用它。谁能解释一下?

0 投票
1 回答
1124 浏览

x86 - RPL 可以不同于 x86 机器上的 DPL 吗?

我正在阅读有关 x86 分段保护的博客文章。RPL 可以与 DPL 不同吗?如果可以,它的用例是什么?

0 投票
2 回答
3169 浏览

assembly - 手动计算物理地址(IDTR 寄存器)

我一直在努力解决这个问题很长时间了,但我一无所获。

这是我想要做的:如果 IDTR 中包含的值为 0x3A000,则中断向量编号 3 位于保护模式下的哪个物理地址?

我想找到一个公式来帮助我计算中断向量#3 偏移量的每个字节的物理地址,以及中断向量#3 段的每个字节的物理地址。

我一直在寻找互联网,并没有关于 IDTR 如何计算这个的可靠解释,我真的很好奇。

我也很好奇如何为实模式找到相同的物理地址......

如果有人可以帮助我找到解决此类问题的通用公式,那将是一个爆炸!

0 投票
3 回答
6077 浏览

assembly - x86保护模式下段寄存器的目的是什么?

我需要修改一些 dll,但我不知道,段寄存器 ( DS, SS, ...) 在保护模式下的作用是什么。我在学校学习了真正的 16 位模式,其中段寄存器乘以 16 加上普通寄存器中的偏移量给出物理内存中的有效地址。在保护模式下,有一些平面内存模型和虚拟内存,其中每个进程“拥有”4GB 内存,所以如果寄存器有 32 位,那么我只能通过“偏移”寄存器来寻址虚拟内存的每个字节。那么哪些 puproses 在保护模式下具有段寄存器,例如

0 投票
1 回答
244 浏览

assembly - 立即数(方括号)和索引寄存器 + 堆栈段中具有 2x dw 的文件

我对汇编很陌生,并尝试通过了解一个旧的 16 位 dos 游戏的反汇编来学习它(由 IDA Free 生成的反汇编)。

我在该代码中读到了两件事,我想,猜到了它的作用。不过我不确定我是否正确,所以我想检查一下(顺便说一句,这里只是缩短了示例代码):

1)

我猜它使用ds一些神奇的默认段来应用偏移量并计算物理地址。

2)

所以我的堆栈看起来像:

然后:

我猜寄存器现在是es=0012hdi= BAF6h,这在查看其余游戏代码时是有意义的,但由于我的堆栈看起来像BAF6 0012 ...,这意味着第一个单词被放入di,而第二个单词被放入es。这让我有点困惑,因为它有点颠倒了这两个词的顺序(从我的角度来看)。

0 投票
2 回答
1397 浏览

c++ - Segmentation Fault in Constructor

This happens with EVERY class I try to make in C++. Migrating from java, I find problems mainly in making classes. I run valgrind and it's in the constructor, it appears to be.

As you can see I'm trying to call the constructor of this model class into the main method. Here's the code for the constructor

When it's called it closes with a segmentation fault. Important: I have declared the class inside the header file. This is when I get the error. I put the class inside the source file and it runs fine. What am I doing wrong?

0 投票
1 回答
6636 浏览

c - 修改ELF文件

我有一个 ELF 可执行文件,我想知道如何修改它的 .rodata 段。

此外,更一般地说,我如何修改 ELF 可执行文件?

0 投票
1 回答
2901 浏览

x86 - 从物理地址计算逻辑地址(x86)

据我所知,物理地址是通过将段地址(16位)左移4次并将其与16位偏移地址相加来计算的。我的问题是,如果两组不同的段:偏移地址值给出相同的结果,例如。对于 200A:B608 和 2138:A328

200A0

+B608


2B6A8


21380

+A328


2B6A8


两者都给出相同的结果!

现在,这是否意味着它们指向相同的物理地址(如果是,如何?),

或者物理地址是否不应该以上述方式计算?

或者,如果它有效,那么我怎样才能从物理地址中获取段:偏移地址(这可能吗?)

0 投票
1 回答
925 浏览

windows - windows 内存分割 & Ollydbg

关于windows内存分割的几个问题。

  1. Windows 中的每个进程都有自己的虚拟内存。这是否意味着每个进程都有自己的任务(我的意思是自己的任务描述符或任务门)?

  2. 我用 ollydbg 打开了一个简单的 exe,我看到每个对 dll 函数的 CALL 指令都将我带到了跳转表。跳转表有到 DLL 的跳转指令,如下所示:

    JMP DWORD PTR DS:[402058]

    我的问题是为什么它使用数据段而不是 CS 选择器作为基地址?如果我打开内存映射并找到存储在 402058 的内容,我会发现它包含资源。如果我正确理解了存储在 DS 中的 DLL 函数的地址?

  3. 我注意到内存映射是由所有者组织的。它不应该用段来组织,比如所有代码都在 DS 等的 CS 数据中吗?

    谢谢你

0 投票
1 回答
590 浏览

ollydbg - 代码\数据段重叠

当我查看 Olly 中的寄存器窗口时,我看到代码段和数据段寄存器都跨越了整个内存空间。这是否意味着它们相互重叠?

当我查看内存映射时,它似乎同时填充了代码区域和数据区域。