我正确转换了吗?

原始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");

最佳答案

如果需要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);
}

08-16 10:27