Чтение значения регистра CR4

Тема в разделе "WASM.NT.KERNEL", создана пользователем DeRekX, 5 окт 2008.

  1. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Собственно на прямую чтение регистра CR4 не выходит :

    Код (Text):
    1. ..
    2. __asm
    3.     {
    4.     PUSH EAX
    5.     MOV  EAX, CR4; <--
    6.            ..
    7.            }
    8. ..
    error C2094: label 'CR4' was undefined

    Как читать значение CR4 ?
    Собираю в VS2k8

    В исходниках reactOS нашёл как раз этот кусочек (..\ReactOS-0.3.4-REL-src\ReactOS-0.3.4\hal\halx86\mp\apic.c )

    Код (Text):
    1. static __inline__ __attribute__((always_inline)) unsigned long __readcr4(void)
    2. {
    3.     unsigned long value;
    4.     __asm__ __volatile__("mov %%cr4, %[value]" : [value] "=q" (value));
    5.     return value;
    6. }
    Подскажите как это "перевести" на С\С++ под win32
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    DeRekX
    Запиши в маш кодах.
    db 0Fh,20h,E0h
    Встроенный ассемблер поддерживает не все конструкции ассемблера пользуйся сторонним и подключай его как подуль.
    http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/eb9a2585-ca3f-477f-ad08-a5aa04a68671/
    Там еще и другой способ предложили вызывать __readcr4

    В конце концов можно сменить компилятор.
     
  3. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Да, интрин рулит, правда чтоб юзать его с нтфс надо его немного подрихтовать (покоментить Interlocked...). Я еще юзаю в дровах windows.h и проч. (у мну один код на дрова и на юзермод) так что там много покоментить надо было (1 раз, потом каждую переустановку студии просто подрубаешь ддк без установки)
     
  4. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Код (Text):
    1. __inline
    2. ULONG
    3.  CR4(
    4.     )
    5. {
    6.     // mov eax, cr4
    7.     __asm _emit 0x0F __asm _emit 0x20 __asm _emit 0xE0
    8. }
    их исходника Great http://www.wasm.ru/pub/21/files/mem_management/ptetest.rar \mmvalid.h

    Great: приятно, когда меня цитируют =). - прим. Great