Здравствуйте, у меня возникла сложность при добавлении вставки в код драйвера. мне надо сделать такую вставку: Код (Text): __asm { mov eax, cr3 mov var, eax } Но утилита build ее не компилирует, пытался через db сделать, тоже не получилось, как ее скомпилировать? И еще маленький вопросик, надо ли регистры которые используются в вставке сохранять в стеке и восстанавливать?
acckiitvar Читай здесь http://en.wikipedia.org/wiki/Calling_conventions И в справке на компилятор. http://www.rsdn.ru/Info/Howtoask.xml
Что то меня и правду глюкануло, надо в драйвер на С встроить эту вставку. Просто build говорит что мол такой регистр не знаю и иди-ка ты лесом парень) А в чем смысл соглашений о вызовах что ты упомянул? Они же при call-е нужны, или вставка оформляется как call?
acckiitvar Компиляторы MS очень плохо поддерживают asm. Студийный, правда, cr3 ещё компилирует, а cr4 уже нет. В любом случае для таких простых операций интринсики надо использовать: в заголовочном файле (stdafx.h, например): Код (Text): extern "C" { #include <ntddk.h> unsigned long __readcr3(void); unsigned long __readcr4(void); }; #pragma intrinsic(__readcr3, __readcr4) Потом в коде можно просто var = __readcr3(); Для более сложных случаев я компилирую ассемблерный код fasm'ом в MS COFF, а студия уже всё вместе линкует.