VS C ++ ASM到GCC ASM

时间:2013-06-01 15:14:32

标签: c++ assembly

我是否正确转换了这个?

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

1 个答案:

答案 0 :(得分: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);
}