4

我有这个简单的汇编命令:

mov eax, fs:[30h];

我的问题是我需要知道这个命令真正读取了哪个特定地址。我发现了很多关于汇编器寻址模式的文档,但没有关于寄存器:符号。

有人可以解释一下地址计算背后的数学原理吗?

4

3 回答 3

3

FS是段描述符表的索引,段描述符又包含添加到地址的基地址。在 win32 上,FS用于访问线程信息块(或更准确地说,索引的段描述符FS有一个基地址,即FS:[0]TIB 的开头),并且FS:[30h]是指向进程环境块的指针的位置。在 win64 上,GS用于访问 TIB。

于 2013-06-20T13:24:46.727 回答
1

FS在 Win32 中获取段的基地址,可以使用该GetThreadSelectorEntry函数(仅限 x86)。

如果您正在编写调试器,则可以使用/结构中的lpThreadLocalBase值,这些值将发送到每个新线程或进程的调试器。这指向线程,适用于 x86 和 x64 进程(在 x64 上,寄存器用于 TEB)。CREATE_THREAD_DEBUG_INFOCREATE_PROCESS_DEBUG_INFOTEBGS

于 2013-06-20T19:18:02.290 回答
-1

最好的解释(甚至有图片)都放在这里:

http://flint.cs.yale.edu/cs422/doc/art-of-asm/pdf/

第 4 章是您应该阅读的内容。

于 2013-06-20T10:03:39.963 回答