1

我正确转换了吗?

原始 VS C++ 版本:

 _TEB *pTeb = NULL;

        _asm
        {
            mov eax, fs:[0x18];
            mov pTeb, eax;
        }

我的尝试(GCC):

 _TEB *pTeb = NULL;

        asm ("movl %%fs:0x18, %%eax\n\t"
             "movl %%eax, %0"
            : "=rm" (pTeb) : : "%eax");
4

1 回答 1

0

如果你需要 Windows 相关代码的 GCC 语法,一个很好的检查源是ReactOS源。这是他们的实现NtCurrentTeb()(删除了不相关的部分):

unsigned long __readfsdword(const unsigned long Offset)
{
    unsigned long value;
    __asm__ __volatile__("movl %%fs:%a[Offset], %k[value]" : [value] "=r" (value) : [Offset] "ir" (Offset));
    return value;
}

struct _TEB * NtCurrentTeb(VOID)
{
  return (PTEB)__readfsdword(0x18);
}
于 2013-06-03T10:40:48.977 回答