• XSS.stack #1 – первый литературный журнал от юзеров форума

MinGW32 __readfsdword

Пожалуйста, обратите внимание, что пользователь заблокирован
Но это всё про GCC, а LLVM IR это вроде в Clang?
Clang может работать с хедерами и линкером как студии, так и мингв.
 
Clang может работать с хедерами и линкером как студии, так и мингв.
Вот фрагмент кодогенератора Clang https://github.com/llvm/llvm-projec...clang/lib/CodeGen/CGBuiltin.cpp#L14746-L14757
C++:
  case X86::BI__readfsbyte:
  case X86::BI__readfsword:
  case X86::BI__readfsdword:
  case X86::BI__readfsqword: {
    llvm::Type *IntTy = ConvertType(E->getType());
    Value *Ptr =
        Builder.CreateIntToPtr(Ops[0], llvm::PointerType::get(IntTy, 257));
    LoadInst *Load = Builder.CreateAlignedLoad(
        IntTy, Ptr, getContext().getTypeAlignInChars(E->getType()));
    Load->setVolatile(true);
    return Load;
  }
Т.е. ему не нужны определения этих функций. Но в intrin.h нет объявления именно для __readfsdword.
 
Там кстати есть и RtlGetCurrentPeb()

Wine экспортирует:
$ grep Current.eb wine/dlls/ntdll/ntdll.spec
@ stdcall -arch=i386,arm64 NtCurrentTeb()
@ stdcall RtlGetCurrentPeb()

В Wine есть и ассемблерные варианты для GCC
C:
#if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
{
    struct _TEB *teb;
    __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb));
    return teb;
}
#elif defined(__x86_64__) && defined(__GNUC__)
static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
{
    struct _TEB *teb;
    __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb));
    return teb;
}
#elif

Примерно так же реализованы интринсики для mingw-w64 https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/include/psdk_inc/intrin-impl.h

Но это всё про GCC, а LLVM IR это вроде в Clang? Там есть такой интересный нюанс

lib/clang/13.0.0/include/intrin.h is missing __readfsdword​

https://github.com/llvm/llvm-project/issues/50532


Что показывает компилятор, если запустить его с ключём --vers?
Clang 5.0.0 release, 11 LLVM
 
Clang может работать с хедерами и линкером как студии, так и мингв.
У меня хедеры от мингв
При том я заметил что нету даже ProcessInformation в заголовках :/
 
Там кстати есть и RtlGetCurrentPeb()

Wine экспортирует:
$ grep Current.eb wine/dlls/ntdll/ntdll.spec
@ stdcall -arch=i386,arm64 NtCurrentTeb()
@ stdcall RtlGetCurrentPeb()

В Wine есть и ассемблерные варианты для GCC
C:
#if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
{
    struct _TEB *teb;
    __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb));
    return teb;
}
#elif defined(__x86_64__) && defined(__GNUC__)
static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
{
    struct _TEB *teb;
    __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb));
    return teb;
}
#elif

Примерно так же реализованы интринсики для mingw-w64 https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/include/psdk_inc/intrin-impl.h

Но это всё про GCC, а LLVM IR это вроде в Clang? Там есть такой интересный нюанс

lib/clang/13.0.0/include/intrin.h is missing __readfsdword​

https://github.com/llvm/llvm-project/issues/50532


Что показывает компилятор, если запустить его с ключём --vers?
RtlGetCurrentPeb помогло, спасибо огромное!!!!
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх