В общем задача проста: получить адрес PEB своей (x64) программы. Язык С. Компилятор VS2010. Если для x32 можно было бы использовать mov eax, fs:[0x30], то для x64 использовать ассемблер запрещено. Как быть?
Можно написать в отдельном .asm файле, или воспользоваться этим семейством ф-ий. В 64битной среде используется не fs, а gs.
Код (Text): #include "winternl.h" static PEB* NtGetPeb() { #ifdef WIN64 return (PEB*)__readgsqword(0x60); #else return (PEB*)__readfsdword(0x30); #endif }
ассемблер там не запретили, запретили inline assembly. коли душа желает - добавляешь в проект масм файл и сопутствующий build customization для масма. а вот почему они это замутили - может изза бекинга? а может дабы ограничить неконтролируемую модификацию кода хз. но это давно уже. относительно.