使用段寄存器 FS 进行调试

Debugging with segment register FS

我需要调试一个用 C 编写的应用程序,该应用程序读取和写入段寄存器 FS。要调试此应用程序,我需要查看 FS 指向的内存地址。

应用程序使用这样的代码:

mov rdx, fs:[rcx]
mov fs:[rcx], rsi

如何获取 read/write from/to 段寄存器的线性虚拟地址?我可以为 Linux 或 Winodws 编译此应用程序。

在 linux 上,您可以使用 arch_prctl(ARCH_GET_FS, &fsbase)。在 windows 中,如果 FS 像往常一样指向 TEB,您可以阅读 fs:[0x18] 以获取基地址,或者使用调试器的功能(如果可用)。