Ошибка vmm.inc

Тема в разделе "WASM.WIN32", создана пользователем Llirik, 19 июл 2008.

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Здравствуйте. Я новичек в программировании, поэтому пожалуйста не будьте ко мне очень строги. У меня есть один исходничек, но при его компиляции ml выдает ошибку:

    vmm.inc(312) : error A2008: syntax error : &
    MacroLoop(16): iteration 1: Macro Called From
    MakeCodeSeg(41): Macro Called From
    vmm.inc(312): Include File
    vmm.inc(312) : fatal error A1008: unmatched macro nesting
    MacroLoop(21): iteration 1: Macro Called From
    MakeCodeSeg(41): Macro Called From
    vmm.inc(312): Include File

    Пожалуйста подскажите в чем может быть причина.
     
  2. n0hack

    n0hack New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2008
    Сообщения:
    71
    А что это за инклуд и для чего он Вам?
     
  3. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Ошибка происходит в файле vmm.inc в 312 строке, что ещё надо то?!
    Видно что там макрос, значит ошибка в макросе или в том, что ему передаётся.
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Llirik
    Попробуй:
    ml -coff -c -Cx -DMASM6 -DBLD_COFF имя_иходника
     
  5. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    не помогло. ошибок еще больше стало.

    vmm.inc из 98DDK
     
  6. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    а как определить что и откуда ему передается? Ведь функций в исходнике больше 100.
     
  7. n0hack

    n0hack New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2008
    Сообщения:
    71
    Может сорец на более свежую версию рассчитан? XP SP1 DDK?
     
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Llirik
    ошибок еще больше стало
    Давай исходник(и).

    Я пробовал на тривиальном
    Код (Text):
    1. .386
    2. include vmm.inc
    3. end
     
  9. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Вот. Держи!
    asm сделал Sourcer 8.1 из файла Ntkern.vxd из Win98if
     
  10. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Llirik
    не помогло.
    Не правда. Раньше компиляция _останавливалась_ на vmm.inc, а теперь пришла пора работать над содержимым твоего NTKERN.ASM.

    ошибок еще больше стало.
    Подключай mtrr.inc, vkd.inc, shell.inc, vpowerd.inc, vwin32.inc, vtd.inc, ifsmgr.inc, configmg.inc и т.д. до тех пор, пока не перестанет ругаться " NTKERN.ASM(...) : error A2006: undefined symbol : ??_vxdid ". Смотришь на строчку, в которой ошибка, ищешь в каком inc'е соответствующее имя и подключаешь его.

    + sourcer кое-где обрезал имена (или использовал похожие, наверное, у него свои inc'и), пример обрезания - строка 4884 написано _VPOWERD_W32_Set_System_Power, а должно быть _VPOWERD_W32_Set_System_Power_State, строка 24209 написано _VWIN32_SetWin32EventBoostPrio, а должно _VWIN32_SetWin32EventBoostPriority и т.д., пример похожести - строка 32772 написано _CONFIGMG_Set_Device_Dvr_PvtDW, а должно быть _CONFIGMG_Set_Device_Driver_Private_DWord и т.д.

    + sourcer знает не все call'ы, обрати внимание на строки содержащие "?? undocumented sub-function", надо разбираться что это такое.

    + разберись с arpl'ями (строка 538 и т.п.) там явно данные.

    ps ты же не думал, что сразу после работы sourcer'а можно компилировать ;)
     
  11. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Я исправил имена всех функций и вот дошел до строки 8795 и никак не могу понять что за функция. пожалуйста помогите с ней разобраться. Функция _MPLeaveSingleProcessor
     
  12. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Llirik
    дошел до строки 8795
    Номер строки из оригинального/приаттаченного файла или после "исправил имена всех функций"?

    _MPLeaveSingleProcessor
    Откуда такое имя?
     
  13. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Мне бы тоже это знать)) В листинге Sourcer`а оно есть, да и IDA его выдает. Вот листинг Sourcer`а и подправленный asm, правда ошибок в нем еще много
     
  14. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    У меня еще один вопрос) Что делать с error A2107: cannot have implicit?)
     
  15. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Llirik
    листинге Sourcer`а оно есть
    Ни в прикрепленных тобой архивах, ни в оригинальном ntkern.vxd v4.10.2222 я не вижу _MPLeaveSingleProcessor.

    Вернемся к строке 8795.
    Я не готов сказать, что там такое, для компилятора достаточно сделать так
    Код (Text):
    1. sub_93      proc    near
    2.         push    ebp
    3.         mov ebp,esp
    4.         push    ecx
    5. db 0CDh, 20h    ;;      VMMcall
    6. dd 000101BDh    ;;            dw    01bdH       ; Win-VMM function    
    7.         mov dword ptr [ebp-4],eax
    8.         mov eax,dword ptr [ebp-4]
    9.         leave               ; Procedure exit
    10.         retn
    11. sub_93      endp
    Что делать с error A2107: cannot have implicit?
    Если надо быстро, т.е, чтобы компилятор не ругался, то сделай один сегмент, закомментировав
    Код (Text):
    1. ...
    2. seg_a       segment para public use32
    3.         assume cs:seg_a  , ds:seg_a
    4. ...
    5. ;;seg_a     ends
    6. ...
    7. ;;seg_b     segment para public use32
    8. ;;      assume cs:seg_b  , ds:seg_a
    9. ...
    10. ;;seg_b     ends
    11. .
    12. . ;; итак далее по seg_i включительно
    13. .
    14. ;;seg_j     segment para public use32
    15. ;;      assume cs:seg_j  , ds:seg_a
    16. ...
    17. seg_a       ends;;seg_j     ends
    Когда объединишь сегменты, ошибок, на которые ругается компилятор, останется очень мало. Среди них будет упоминание MTRRSetPhysicalCacheTypeRange (чуть ниже sub_352) вызов этой функции (через макрос VxDcall) должен иметь вид
    Код (Text):
    1. VxDcall MTRRSetPhysicalCacheTypeRange <p1, p2, p3, p4>
    где p# - параметры, которые макрос поместит в стек. В коде они уже помещены в стек (похоже, что код написан на Си)
    Код (Text):
    1. ...
    2. sub_352::
    3.         push    dword ptr [esp+0Ch]
    4.         push    dword ptr [esp+0Ch]
    5.         push    dword ptr 0
    6.         push    dword ptr [esp+10h]
    7. ...
    т.е. придется либо переписать эту часть кода использования макроса, либо заменить макрос на
    Код (Text):
    1. ...
    2. sub_352::
    3.         push    dword ptr [esp+0Ch]
    4.         push    dword ptr [esp+0Ch]
    5.         push    dword ptr 0
    6.         push    dword ptr [esp+10h]
    7. ;;      VxDcall MTRRSetPhysicalCacheTypeRange   ; MTRR               fn=4A0001h
    8.         db  0CDh, 20h
    9.         dd  004A0001h
    10.         retn    0Ch
    11. ...
     
  16. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    И наверно последний вопрос. Что делать с jnz short loc_1756 на строке 25856, ведь в asm`е вообще нет такой метки?
     
  17. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Llirik
    Что делать с jnz short loc_1756
    Я уже писал в #10 "разберись с arpl'ями (строка 538 и т.п.) там явно данные". В этом случае то же самое. Еще про данные
    Код (Text):
    1. ...
    2. loc_4::
    3.         add byte ptr [esi+0],ch
    4. ...
    после компиляции будет db 00h, 0Eh, а должно быть (см. ntkern2.rar.nkkern.lst)
    Код (Text):
    1. ...
    2. 00B53                       loc_4::
    3. 00B53  00 6E 00                             add     byte ptr [esi+0],ch
    4. ...
     
  18. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    q_q
    извини, конечно, за мою тупость) но я пытался заменить данными jnz short loc_1756 еще до твоего совета, но вместо этой ошибки появляется куча новых)
     
  19. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Llirik
    я пытался заменить данными
    Как?

    Для компилятора достаточно
    Код (Text):
    1. ...
    2. db 75h, 74h   ;; jnz     short loc_1756
    3. ...
    т.е. смотришь в ntkern2.rar.nkkern.lst и вставляешь байты.

    Если хочешь правильно, то в этом месте часть строки
    Код (Text):
    1. ...
    2. db 'ideo tim'   ;;  imul    esp,dword ptr [ebp+6Fh],6D697420h
    3. db 'eo'     ;;  outs    dx,dword ptr gs:[esi]
    4. db 'ut'     ;;  jnz short loc_1756
    5. db ': '     ;;  cmp ah,[eax]
    6. ...
    hint правильность строк можно сверять с оригинальным ntkern.vxd.
     
  20. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    q_q

    Так я изначально и делал) просто после этого появляются ошибки типа error A2075: jump destination too far, например 3758