VS C++ ASM to GCC ASM

VS C++ ASM to GCC ASM

本文关键字:ASM GCC to VS C++      更新时间:2023-10-16

转换正确吗?

VS ++原始版本:

 _TEB *pTeb = NULL;
        _asm
        {
            mov eax, fs:[0x18];
            mov pTeb, eax;
        }

My attempt (GCC):

 _TEB *pTeb = NULL;
        asm ("movl %%fs:0x18, %%eaxnt"
             "movl %%eax, %0"
            : "=rm" (pTeb) : : "%eax");

如果你需要GCC语法的windows相关的代码,一个很好的源代码检查是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);
}