问题标签 [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.
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?
windows - 如何在 IDA Pro 中获取 .text 段统计信息?
有什么方法可以显示 .text 段 IDA Pro 将多少字节视为指令以及多少字节视为数据?是否还有其他统计数据(例如函数大小)?
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。我试图谷歌它,但我找不到任何答案。这就是我花时间写这个问题的原因。
memory-management - 为什么 64 位模式(长模式)不使用段寄存器?
我是学生的初学者:) 我正在研究英特尔架构,并且正在研究内存管理,例如分段和分页。我正在阅读英特尔的手册,了解英特尔的架构非常好。
但是我仍然对一些基本的东西感到好奇。为什么在 64 位长模式下,所有段寄存器都将变为位 0?为什么系统不再使用段寄存器?
因为系统的 64 位大小(例如 GP 寄存器)足以一次包含这些逻辑地址?保护在 64 位模式下是否正常工作?
我试图找到 64 位寻址,但在 Google 中找不到。也许我的搜索技巧很糟糕,或者我可能需要一些特定的先前知识才能在谷歌中搜索。
因此,我想知道为什么 16 位段寄存器不会在 64 位模式下使用,以及保护如何在 64 位模式下正常工作。
谢谢!
c - 这将是什么输出?也请解释一下
我已经尝试过这段代码,但我无法理解输出
这里的分段内存地址是什么,偏移的部分是什么?
memory-management - 通常使用哪种虚拟内存转换技术(考虑 x86)?
众所周知,在MMU的帮助下,有多种虚拟地址转换(x86),如分段、分页、组合分段-分页(Paged segmentation,Segmented Paging)等,各有优缺点。
我的问题: 1) 像 Linux/Windows 这样的通用操作系统是否只使用一种特定的技术(如分页)?2) 如果给定的操作系统有两种或多种技术可用,那么每种技术将在何时何地使用?我们可以根据自己的需要定制吗?3)如果只使用'分页',那么x86的段寄存器以什么方式使用?
gdb - gs的虚拟地址:0x14
如果我们用 gcc 编译一些 C 代码,我们经常会看到以下汇编结果
这是一个简单的函数序言。从 +19 行,我们可以看到堆栈保护器的值是从 gs:0x14 获得的。我的问题是,我可以用 gdb 知道 gs:0x14 的实际虚拟地址吗?gs 段选择器值表示与 GDT 的偏移量,但是,用户级进程(如 gdb)无法访问 GDT 信息。如何使用 gdb 或其他调试器找出 gs 段的基地址?这是不可能的吗?
先感谢您。
x86 - x86 段寄存器在现代 CPU 和操作系统上是否具有特殊含义/用途?
从 16 位到 32 位再到 64 位,x86 CPU 具有各种棘手的模式和内存分段。
这些天来,现代操作系统在现代操作模式下使用现代 CPU,您不必担心内存段,但您仍然可以在现代 CPU 上的旧操作系统上运行旧应用程序,在这种情况下,我认为 CPU 以特殊的传统方式运行模式(保护模式、实模式等)。
很明显,段寄存器的存在是为了向后兼容,但这是唯一的原因吗?
段寄存器也有现代用途吗?或者它们现在只是成为通用寄存器,仅具有反映其历史功能的名称?
这个问题的灵感来自对这个旧堆栈溢出线程的评论:为什么必须以这种方式使用 mov 指令?
x86 - 使用 GDB 读取 MSR
在使用 GDB 调试程序时,是否有某种方法可以读取特定于 x86-64 模型的寄存器,特别是 IA32_FS_BASE 和 IA32_GS_BASE?
不太可取的是使用像英特尔的 Pintool 这样的动态仪器包的解决方案,但同样值得赞赏。
c - C:分割错误
我在 c 中实现了 vigenère algorithme。
不幸的是,在测试程序时,我遇到了分段错误。我在mac上用clang编译。
我怎样才能避免这个错误?
源代码:
调试输出:
问候