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

Discussion in 'WASM.NT.KERNEL' started by acckiitvar, Nov 22, 2011.

  1. acckiitvar

    acckiitvar Member

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

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    acckiitvar
    Читай здесь http://en.wikipedia.org/wiki/Calling_conventions
    И в справке на компилятор.

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

    acckiitvar Member

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

    l_inc New Member

    Blog Posts:
    0
    Joined:
    Sep 29, 2005
    Messages:
    2,566
    acckiitvar
    Компиляторы MS очень плохо поддерживают asm. Студийный, правда, cr3 ещё компилирует, а cr4 уже нет. В любом случае для таких простых операций интринсики надо использовать:
    в заголовочном файле (stdafx.h, например):
    Code (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

    Blog Posts:
    0
    Joined:
    Dec 29, 2007
    Messages:
    925
    Юзай Intel C++ compiler
    В твоем случае замечательная альтернатива студийному компилятору
     
  6. acckiitvar

    acckiitvar Member

    Blog Posts:
    0
    Joined:
    Sep 26, 2011
    Messages:
    71
    Спасибо, завтра попробую)
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Joined:
    Jun 11, 2004
    Messages:
    3,568
    Location:
    Russia
    Через __emit не пробовал чтоле?
     
  8. acckiitvar

    acckiitvar Member

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

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Joined:
    Jun 11, 2004
    Messages:
    3,568
    Location:
    Russia
    acckiitvar
    Погуглите )
     
  10. acckiitvar

    acckiitvar Member

    Blog Posts:
    0
    Joined:
    Sep 26, 2011
    Messages:
    71
    Я попробовал, спасибо, то что надо. Все сделал