【问题标题】:Debugging with segment register FS使用段寄存器 FS 进行调试
【发布时间】:2015-11-13 07:37:31
【问题描述】:

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

应用程序使用如下代码:

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

如何从/向段寄存器获取读/写的线性虚拟地址?我可以为 Linux 或 Winodws 编译这个应用程序。

【问题讨论】:

  • Windows 将 FS 用于“每个线程”变量,我几次查看汇编代码时,它会将 FS:[...] 转换为常规虚拟地址。 rand() 的当前种子是那些“每个线程”变量之一,这就是我所看到的。

标签: c debugging assembly x86 x86-64


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2014-11-21
    相关资源
    最近更新 更多