gpt4 book ai didi

assembly - "DS:[40207A]"在汇编中是什么意思?

转载 作者:行者123 更新时间:2023-12-02 15:30:06 25 4
gpt4 key购买 nike

0040103A   CALL DWORD PTR DS:[40207A]                USER32.MessageBoxA

DS: 是什么意思?

最佳答案

该指令正在从内存 ds:[40207A] 加载新的 EIP 值。即地址 40207A 处有一个函数指针。 (它会推送返回地址,因为这是一个调用,而不仅仅是一个jmp。)

ds: 表示指令引用数据段中的内存 - 在现代操作系统上几乎可以忽略,因为它们使用平面地址空间模型(代码、数据和堆栈段)运行都引用相同的内存范围,内存保护是通过分页处理的)。

ds: 的作用是向您显示它绝对是一个内存操作数,并提醒您它使用哪个段/显示没有段覆盖前缀(可能除了 ds 前缀,因为这已经是默认值)。

编辑:

一点详细说明 - 请注意,为了简单起见,这是在运行 Windows 的 32 位保护模式的上下文中。

段寄存器(CS、DS、SS、ES、FS、GS)保存一个指向描述符选择器。有两个描述符表:全局( GDT )和本地( LDT ),并且选择器有一个位指示要使用哪个。 Windows(几乎?)专门使用全局表。

描述符基本上是一个{beginning-address, size}对 - 还有更多内容,但这超出了本文的范围发布。

Windows 使用 Flat Memory Model :每个进程都有一个从内存地址0开始的4GB地址空间,并使用paging将进程彼此隔离。

由于进程具有这种平坦的世界 View ,因此它们使用 {0, 4GB} 描述符与所有段一起运行 - 因此,Windows 可以仅使用少数全局描述符并让所有进程使用,而不是分配每个进程描述符那些。

编辑2:

Portable Executable format 定义了 sections,它们与 x86 segments 无关 - 即使存在一些概念上的重叠。 PE EXE 几乎可以具有您想要的任何部分布局,但正常情况是分为(至少)代码(读/执行)、数据(读/写)、资源(只读?)。将可执行文件分割成多个部分可以将 x86 页级内存保护应用于内存范围。

编辑3:

虽然普通段不会根据进程进行更改,但 Windows 使用 FS 寄存器来指向每个线程 TIB结构。

编辑4:

参见this以获得概述。这是来自 80386 的旧文档,但该信息仍然适用。

关于assembly - "DS:[40207A]"在汇编中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3819699/

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