Помогите разобраться с 64 битами

Тема в разделе "WASM.X64", создана пользователем WaterGhost, 19 май 2009.

  1. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Написал драйвер для 32 бит. Необходимо его перенести на 64 битную платформу. Юзаю "1830 usa ddk" и MVS 2005 + Windows XP 32 bit build 2600 sp3. Определил в проекте в менеджере конфигурации 64 бит архитектуру, пути до WinDDK прописал для них те же что и для 32 бита. Пытаюсь компилить, выдаёт: fatal error C1189: #error : "No Target Architecture" C:\WINDDK\3790.1830\inc\wnet\ntdef.h


    Напрашиваются вопросы:
    - что это за ошибка и как её устранить? Я так понимаю дело в определинии архитектуры проекта
    - Можно ли компилировать драйвера под х64 из под 32 битной Windows с моим WinDKK? Или необходима 64 битная винда?

    К гуглу и поиску не отправляйте, уже гуглил и статьи некоторые прочитал про х64. Ничего про это сказано не было (
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Не указана архитектура. Из под 32 bit OS можно собирать x64 битные драйвера\аппликухи.
     
  3. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Ага.. понял. Сорь... указал. Куча ошибок вылезло сразу ( Буду разбираться, драйвер не маленький, переделывать кучу надо скорее всего. Если что не будет получаться буду здесь писать. Так что пожалуйста пока не закрывайте эту тему пока
     
  4. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    nonstandard extension used : '__asm' keyword not supported on this architecture
    Судя из гугла и моих личных заключений на х64 не поддерживается эта директива =\ Люди пишут что необходимо в отдельный файл ассемблерные вставки пихать и как то их соединять с файлом проекта. Я впервые об этом слышу и хочу спросить как это делается ну или хотя бы дайте толчок в каком направлении двигаться. Спасибо за внимание
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Можно линковщику в настройках указать obj-файл скомпилированный masm'ом.
     
  6. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    А можно создать в проекте отдельный файл .asm и в него пихать код асмовский и вызывать его?
     
  7. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Вообщем-то мне надо сбросить и восстановить содержимое CR0

    Код (Text):
    1. /*__asm
    2.     {
    3.         cli                  
    4.         mov     eax,cr0
    5.         mov     CR0Reg,eax
    6.         and     eax,0xFFFEFFFF    
    7.         mov     cr0,eax
    8.     }*/
    9.  
    10.         ...Мой код...
    11.  
    12.     /*__asm
    13.     {
    14.         mov     eax,CR0Reg    
    15.         mov     cr0,eax    
    16.         sti                
    17.     }*/
    Создал файл .asm. Его содержимое:
    Код (Text):
    1. public InstallHooks1
    2. public InstallHooks2
    3. .CODE
    4.  
    5. InstallHooks1 PROC
    6.     cli                  
    7.     mov     eax,cr0
    8.     mov     CR0Reg,eax
    9.     and     eax,0xFFFEFFFF    
    10.     mov     cr0,eax
    11. InstallHooks1 ENDP
    12.  
    13. InstallHooks2 PROC
    14.     mov     eax,CR0Reg    
    15.     mov     cr0,eax    
    16.     sti
    17. InstallHooks2 ENDP
    18.  
    19. END
    Определил эти процедуры в проекте :
    extern void InstallHooks1();
    extern void InstallHooks2();

    Но дело в том что CR0Reg это переменная которую надо передать в InstallHooks1 чтобы в нее записалось значение а потом его восстановить передав в процедуру InstallHooks2. Я асмом не дружу к сожалению, в идеале знаю Делфи и Си нормально. Не подскажете как решать данную проблему ? Как написать на асме процедуру InstallHooks1 с входящим и исходящим параметром CR0Reg и процедуру InstallHooks2 с входящим CR0Reg. Буду очень благодарен
     
  8. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Откройте для себя стек.
     
  9. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Да, msdn => AMD64_SOURCES.
     
  10. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    С ходу фиг разберёшься... Есть такой флаг я понял AMD64_SOURCES. Код моего АСМовского файла я привел. Используя AMD64_SOURCES в проекте как использовать процедуры из моего .asm файла?

    Как написать на асме процедуру InstallHooks1 с входящим и исходящим параметром CR0Reg и процедуру InstallHooks2 с входящим CR0Reg

    Простите за глупые вопросы, просто для меня это реально проблема (
     
  11. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Можно и без асма.
    Код (Text):
    1. #include <intrin.h>
    2. #pragma intrinsic(_disable)
    3. #pragma intrinsic(_enable)
    4.  
    5. __int64 InstallHooks1()
    6. {
    7.   __int64 CR0Reg;  
    8.   _disable();
    9.   CR0Reg = __readcr0();
    10.   __writecr0(CR0Reg & ~0x10000);
    11.   return CR0Reg;
    12. }
    13.  
    14. void InstallHooks2(__int64 CR0Reg)
    15. {
    16.   __writecr0(CR0Reg);
    17.   _enable();
    18. }
    На выходе:
     
  12. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Спасибо за исчерпывающий овтет!)
    осталось разобраться с 2мя нюансами:
    KeQueryTickCount и KeGetCurrentIrql они не определны... Ошибки:

    Код (Text):
    1. Error   20  error LNK2001: unresolved external symbol KeTickCount
    2. Error   21  error LNK2019: unresolved external symbol __imp_KeGetCurrentIrql referenced in function ProcNotifyRoutine
    Гуглить не получилось (
     
  13. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    А 32 битное приложение может совершать IOCTL запросы в 64 битный драйвер ? =\
     
  14. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Пробую загрузить драйвер под Windows XP 64 bit. Если через мою программу то пишет:
    Код (Text):
    1. 21/05/09 01:22:46 - Client.exe  (552 ) : ZwLoadDriver failed with error #3221225569
    Если через KmdManager из набора Four-F то вот что:
    Код (Text):
    1. REGISTER     - Success - The operation colpleted successfully
    2. START         - Success - The specified procedure could not be found
    3. STOP           - Fail       - The service has not been started
    4. UNREGISTER - Success - The operation colpleted successfully
    Не подскажете в чем дело ? Что за процедура не найдена? Процедура точки входа в драйвер DriverEntry ? Как решить эту проблему?
     
  15. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
  16. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Теперь при загрузке пишет
    Код (Text):
    1. ZwLoadDriver failed with error STATUS_DRIVER_ENTRYPOINT_NOT_FOUND
    Параметры проекта:
    Код (Text):
    1. /OUT:"C:\Driver_Project\mydriver.sys" /NOLOGO /MANIFEST:NO /NODEFAULTLIB /SUBSYSTEM:NATIVE /DRIVER /ENTRY:"DriverEntry" /BASE:"0x10000" /MACHINE:X64 /ERRORREPORT:PROMPT ntoskrnl.lib hal.lib
    Что может быть не так? Компилю под х64, драйвер под х32 работает отлично.
     
  17. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
  18. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    По статусу разве не понятно? Я бы попробовал собрать через мейкфайл и build -icZ
     
  19. WaterGhost

    WaterGhost New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2007
    Сообщения:
    130
    Я не знаю как через мейкфайл собирать х64. Какие параметры прописывать ? не могли бы пример привести? и что такое -icZ. За что этот параметр отвечает?
     
  20. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    У тебя бан на гугле чтоли? Все твои вопросы гуглятся!