问题标签 [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 投票
0 回答
50 浏览

assembly - Role of memory segmentation in modern architectures

As we know that these days , we have multi-processor architectures available such as dual core , core i3, i5, which may have many gigs of RAM. My question is that ia memory protection through segmentation still available in these modern architectures.

(keeping in mind , in earlier architectures such as iAPX 88, we could get benefited from segmented memory modal which would allow us to open 64 K window for every segment ds,es,ss,cs)?

How much size of window will open in 3 GB RAM For these segment registers cs,es ,cs,ss, in case of modern architectures?

0 投票
1 回答
1336 浏览

windows - 如何在 IDA Pro 中获取 .text 段统计信息?

有什么方法可以显示 .text 段 IDA Pro 将多少字节视为指令以及多少字节视为数据?是否还有其他统计数据(例如函数大小)?

0 投票
2 回答
1752 浏览

cpu-registers - intel x86 段寄存器和 GDT(LDT) 寄存器的大小

我是系统架构的初学者,确切地说是intel x86。目前我正在阅读英特尔的手册(1,3a,3b,3c),我被困在分段部分。

据我所知,在保护模式下,系统正在将逻辑内存转换为线性内存(或物理内存),并且“远指针”指向具有 2 个不同部分的实际线性(或物理)内存地址,一个段选择器和偏移量。

据我从大学了解到,每个段寄存器都有 16 位数据部分,根据英特尔的手册,16 位只是段寄存器的可见部分,但段寄存器中有更多的隐藏部分,用户无法编程或访问。我有机会知道段寄存器的实际大小吗?

第二个问题是关于保护模式的 LDT 、 GDT 、 IDT 寄存器。这些寄存器(LDTr,GDTr,IDTr)是cpu芯片组中的实际寄存器吗?如果是,是否有机会在启动序列后访问这些表(preveige ring 3,用户模式)?

感谢您阅读我的问题。

PS。我试图谷歌它,但我找不到任何答案。这就是我花时间写这个问题的原因。

0 投票
2 回答
12033 浏览

memory-management - 为什么 64 位模式(长模式)不使用段寄存器?

我是学生的初学者:) 我正在研究英特尔架构,并且正在研究内存管理,例如分段和分页。我正在阅读英特尔的手册,了解英特尔的架构非常好。

但是我仍然对一些基本的东西感到好奇。为什么在 64 位长模式下,所有段寄存器都将变为位 0?为什么系统不再使用段寄存器?

因为系统的 64 位大小(例如 GP 寄存器)足以一次包含这些逻辑地址?保护在 64 位模式下是否正常工作?

我试图找到 64 位寻址,但在 Google 中找不到。也许我的搜索技巧很糟糕,或者我可能需要一些特定的先前知识才能在谷歌中搜索。

因此,我想知道为什么 16 位段寄存器不会在 64 位模式下使用,以及保护如何在 64 位模式下正常工作。

谢谢!

0 投票
2 回答
124 浏览

c - 这将是什么输出?也请解释一下

我已经尝试过这段代码,但我无法理解输出

这里的分段内存地址是什么,偏移的部分是什么?

0 投票
1 回答
266 浏览

memory-management - 通常使用哪种虚拟内存转换技术(考虑 x86)?

众所周知,在MMU的帮助下,有多种虚拟地址转换(x86),如分段、分页、组合分段-分页(Paged segmentation,Segmented Paging)等,各有优缺点。

我的问题: 1) 像 Linux/Windows 这样的通用操作系统是否只使用一种特定的技术(如分页)?2) 如果给定的操作系统有两种或多种技术可用,那么每种技术将在何时何地使用?我们可以根据自己的需要定制吗?3)如果只使用'分页',那么x86的段寄存器以什么方式使用?

0 投票
0 回答
606 浏览

gdb - gs的虚拟地址:0x14

如果我们用 gcc 编译一些 C 代码,我们经常会看到以下汇编结果

这是一个简单的函数序言。从 +19 行,我们可以看到堆栈保护器的值是从 gs:0x14 获得的。我的问题是,我可以用 gdb 知道 gs:0x14 的实际虚拟地址吗?gs 段选择器值表示与 GDT 的偏移量,但是,用户级进程(如 gdb)无法访问 GDT 信息。如何使用 gdb 或其他调试器找出 gs 段的基地址?这是不可能的吗?

先感谢您。

0 投票
1 回答
898 浏览

x86 - x86 段寄存器在现代 CPU 和操作系统上是否具有特殊含义/用途?

从 16 位到 32 位再到 64 位,x86 CPU 具有各种棘手的模式和内存分段。

这些天来,现代操作系统在现代操作模式下使用现代 CPU,您不必担心内存段,但您仍然可以在现代 CPU 上的旧操作系统上运行旧应用程序,在这种情况下,我认为 CPU 以特殊的传统方式运行模式(保护模式、实模式等)。

很明显,段寄存器的存在是为了向后兼容,但这是唯一的原因吗?

段寄存器也有现代用途吗?或者它们现在只是成为通用寄存器,仅具有反映其历史功能的名称?

这个问题的灵感来自对这个旧堆栈溢出线程的评论:为什么必须以这种方式使用 mov 指令?

0 投票
3 回答
2385 浏览

x86 - 使用 GDB 读取 MSR

在使用 GDB 调试程序时,是否有某种方法可以读取特定于 x86-64 模型的寄存器,特别是 IA32_FS_BASE 和 IA32_GS_BASE?

不太可取的是使用像英特尔的 Pintool 这样的动态仪器包的解决方案,但同样值得赞赏。

0 投票
1 回答
144 浏览

c - C:分割错误

我在 c 中实现了 vigenère algorithme。

不幸的是,在测试程序时,我遇到了分段错误。我在mac上用clang编译。

我怎样才能避免这个错误?

源代码:

调试输出:

问候