ассемблерная вставка

Тема в разделе "WASM.NT.KERNEL", создана пользователем acckiitvar, 22 ноя 2011.

  1. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    Здравствуйте, у меня возникла сложность при добавлении вставки в код драйвера. мне надо сделать такую вставку:
    Код (Text):
    1. __asm
    2. {
    3. mov eax, cr3
    4. mov var, eax
    5. }
    Но утилита build ее не компилирует, пытался через db сделать, тоже не получилось, как ее скомпилировать?
    И еще маленький вопросик, надо ли регистры которые используются в вставке сохранять в стеке и восстанавливать?
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    acckiitvar
    Читай здесь http://en.wikipedia.org/wiki/Calling_conventions
    И в справке на компилятор.

    http://www.rsdn.ru/Info/Howtoask.xml
     
  3. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    Что то меня и правду глюкануло, надо в драйвер на С встроить эту вставку. Просто build говорит что мол такой регистр не знаю и иди-ка ты лесом парень)
    А в чем смысл соглашений о вызовах что ты упомянул? Они же при call-е нужны, или вставка оформляется как call?
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    acckiitvar
    Компиляторы MS очень плохо поддерживают asm. Студийный, правда, cr3 ещё компилирует, а cr4 уже нет. В любом случае для таких простых операций интринсики надо использовать:
    в заголовочном файле (stdafx.h, например):
    Код (Text):
    1. extern "C"
    2. {
    3.     #include <ntddk.h>
    4.     unsigned long __readcr3(void);
    5.     unsigned long __readcr4(void);
    6. };
    7.  
    8. #pragma intrinsic(__readcr3, __readcr4)
    Потом в коде можно просто var = __readcr3();

    Для более сложных случаев я компилирую ассемблерный код fasm'ом в MS COFF, а студия уже всё вместе линкует.
     
  5. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Юзай Intel C++ compiler
    В твоем случае замечательная альтернатива студийному компилятору
     
  6. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    Спасибо, завтра попробую)
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Через __emit не пробовал чтоле?
     
  8. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    Последний раз использовал С года 4 назад, и даже не знаю что это) я по тупому, db 0xxh пробовал
     
  9. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    acckiitvar
    Погуглите )
     
  10. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    Я попробовал, спасибо, то что надо. Все сделал