我有这个简单的汇编命令:
mov eax, fs:[30h];
我的问题是我需要知道这个命令真正读取了哪个特定地址。我发现了很多关于汇编器寻址模式的文档,但没有关于寄存器:符号。
有人可以解释一下地址计算背后的数学原理吗?
我有这个简单的汇编命令:
mov eax, fs:[30h];
我的问题是我需要知道这个命令真正读取了哪个特定地址。我发现了很多关于汇编器寻址模式的文档,但没有关于寄存器:符号。
有人可以解释一下地址计算背后的数学原理吗?
FS
是段描述符表的索引,段描述符又包含添加到地址的基地址。在 win32 上,FS
用于访问线程信息块(或更准确地说,索引的段描述符FS
有一个基地址,即FS:[0]
TIB 的开头),并且FS:[30h]
是指向进程环境块的指针的位置。在 win64 上,GS
用于访问 TIB。
要FS
在 Win32 中获取段的基地址,可以使用该GetThreadSelectorEntry
函数(仅限 x86)。
如果您正在编写调试器,则可以使用/结构中的lpThreadLocalBase
值,这些值将发送到每个新线程或进程的调试器。这指向线程,适用于 x86 和 x64 进程(在 x64 上,寄存器用于 TEB)。CREATE_THREAD_DEBUG_INFO
CREATE_PROCESS_DEBUG_INFO
TEB
GS