DDK x64, как добавить код на ассемблере

Тема в разделе "WASM.NT.KERNEL", создана пользователем katrus, 24 май 2009.

  1. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Нужно в драйвере для х64 написать три строчки на ассемблере. Ни __asm ни __emit, по понятным причинам не доступены. Как добавить к проекту чисто ассемблерным файлом?
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    katrus
    комплировать асм в обж и слинковывать
     
  3. Mr_N

    Mr_N New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    5
    http://x64.blog.ru/ статья "Ассемблерные вставки для 64-битных платформ"
     
  4. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    вот тут хорошая статья с разными вариантами и списком некоторых интринсикс процедур: http://www.codeproject.com/KB/vista/vista_x64.aspx

    например:

    Код (Text):
    1. unsigned char BitSwapAsm[7] =
    2. {
    3.     0x48, 0x8B, 0xC1,        // mov rax, rcx
    4.     0x48, 0x0F, 0xC8,        // bswap rax
    5.     0xC3            // retn
    6. };
    7. __int64 (*BitSwap)(__int64 Value) =  (__int64 (*)(__int64))
    8.                                                      (ULONG_PTR) BitSwapAsm;
    9.  
    10. int _tmain(int argc, _TCHAR* argv[])
    11. {
    12.     //
    13.     // I have to change the page protection, otherwise the code would crash
    14.     //
    15.     DWORD dwOldProtect;
    16.     VirtualProtect(BitSwap, sizeof (BitSwapAsm), PAGE_EXECUTE_READWRITE,
    17.                    &dwOldProtect);
    18.  
    19.     printf_s("%p\n", BitSwap(0xDDCCBBAA));
    20.     getchar();
    21. }
     
  5. Mightywill

    Mightywill New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    31
    народ, а в каком формате этот asm должен быть? и как на него ссылаться в си коде?
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Обновил заметки.
     
  7. Mightywill

    Mightywill New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    31
    x64
    пасиба за оперативность, а с параметрами можно пример? :)

    а то асм забыл совсем, как там кв парметру в стеке обратится... mov eax, [esp+4] или как?
     
  8. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Слушай, иди уже мануал почитай. На худой конец возьми в Visual Studio напиши какой нужно код, и посмотри дизассемблером (а лучше сразу отладчиком), что получилось.
     
  9. Mightywill

    Mightywill New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    31
    лана, лана :)
     
  10. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    я кстати понял тока что как можно сделать навеску на x64 __asm вставками. нужен будет только компилятор ассемблера который будет компилировать эти вставки потом смотрим сколько получилось байт создаем массив этих байт и заполняем его, на месте где была асм вставка размещается какойто код который после компиляции будет заменен на джамп на массив байт (вконце массива будет обратный джамп на код - оп, кто будет делать?
     
  11. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    хотя есть еще другой вариант который был бы совсем простым - использовать генерируемые cl.exe ассемблерные листинги но они не компилируются. я не пробовал оценить усилия которые надо приложить чтоб их скомпилировать
     
  12. Mightywill

    Mightywill New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    31
    народ, скажите плз как из .asm обращаться к глобальным пременным?
    рыл инет, ниче не нашёл.
    сам писал на асме только под линкс, там всё по другому.
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Mightywill
    Для процессора разницы нет, локальная переменная или глобальная, он не знает этого.
     
  14. Mightywill

    Mightywill New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    31
    типа extern хватит?
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Адрес нужно указать соответствующий, что глобально решать вам - глобально для всех процессов, локально может быть через LDT..
     
  16. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    Mightywill
    Добрый вам совет - игнорируйте посты Clerka :). У этих постов цель какая угодно но только не помочь в проблеме
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    SashaTalakin
    Для начала нужно знать в чём проблема, вопрос задавший её не описал. Я не понимаю что есть локальная переменная, может те что в стеке хз.
     
  18. Mightywill

    Mightywill New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    31
    кста я попробовал предварительно 32-битным компильнуть и получил

    (исходник в x32.asm)

    NMAKE : fatal error U1073: don't know how to make 'x32.obj'

    он что, не понимает асм файлы?
     
  19. Mightywill

    Mightywill New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    31
    Clerk
    так я ж не про локальные писал, а про глобальные
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Mightywill
    Ну тогда как обычно, например mov dword ptr ds:[...],eax не перечислять же все опкоды возможные, в интеловских манах описаны посмотрите.