gpt4 book ai didi

visual-c++ - __addgs* 是如何使用的,什么是 GS?

转载 作者:行者123 更新时间:2023-12-04 06:06:45 24 4
gpt4 key购买 nike

在微软的网站上可以找到 some details

__addgsbyte  ( offset, data )
__addgsword ( offset, data )
__addgsdword ( offset, data )
__addgsqword ( offset, data )
内在功能。据说 offset

the offset from the beginning of GS. I presume that GS refers to the processor register.


如果有的话,GS 与堆栈有什么关系?或者,如何计算相对于 GS 的偏移量?
(并且,是否有任何与此和特定调用约定相关的“陷阱”,例如 __fastcall?)

最佳答案

GS 寄存器根本与堆栈无关,因此与调用约定无关。在 x64 版本的 Windows 上,它用于指向操作系统数据:

来自 wikipedia :

Instead of FS segment descriptor on x86 versions of the Windows NT family, GS segment descriptor is used to point to two operating system defined structures: Thread Information Block (NT_TIB) in user mode and Processor Control Region (KPCR) in kernel mode. Thus, for example, in user mode GS:0 is the address of the first member of the Thread Information Block. Maintaining this convention made the x86-64 port easier, but required AMD to retain the function of the FS and GS segments in long mode — even though segmented addressing per se is not really used by any modern operating system.



请注意,这些内在函数仅在内核模式下可用(例如设备驱动程序)。要计算偏移量,您需要知道 GS 指向的内存段。因此,在内核模式下,您需要知道处理器控制区域的布局。

我个人不知道这些有什么用。

关于visual-c++ - __addgs* 是如何使用的,什么是 GS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260651/

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