VdmSetInt21Handler.

Тема в разделе "WASM.WIN32", создана пользователем klzlk, 9 июл 2011.

  1. phoukait

    phoukait New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2011
    Сообщения:
    43
    newbie
    #8 ?
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    _sheva740
    Да, проблемы с ms link. Я пользуюсь переделанным PoLink. В аттаче всё, что нужно для сборки vm2. Удачи!
    http://webfile.ru/5461267
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Mikl___
    Спасибо!
    Действительно link!
    C polink все пошло!
    Вот такой вариант правда, DbgPrint() видно еще и стек не чистит после себя.

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. includelib  \masm32\lib\ntdll.lib
    6. include \masm32\include\windows.inc
    7. includelib  \masm32\lib\kernel32.lib
    8.  
    9. extern _imp__DbgPrint@8:dword
    10.  
    11. .data
    12.     $IsVdm  db "IsVdmProcess: %X", 13, 10, 0
    13.     _outnumb    dd -1  
    14. .code
    15. Start:
    16.     lea edi,_outnumb
    17.     push    dword ptr [edi]
    18.     push    offset $IsVdm
    19.     call    _imp__DbgPrint@8
    20.     add esp,8
    21.     ret
    22. end Start
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    _sheva740
    Хорошо, что Инди не видел эту хню, нужно писать
    Код (Text):
    1. extern _imp__DbgPrint:dword
    и тогда link создает exe -- ты же сам пишешь, что "DbgPrint() видно еще и стек не чистит после себя"
     
  5. phoukait

    phoukait New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2011
    Сообщения:
    43
    _sheva740
    DbgPrint proto C :PSTR, :VARARG

    зы:
    Код (Text):
    1. CHAR typedef BYTE
    2. PSTR typedef Ptr CHAR
    Для инфокласса VdmQueryVdmProcess размер структуры 4+1 байт, тоесть поле IsVdmProcess типа BOOLEAN, но у меня он задефинен как дворд. Иначе размер локалей получается не выравненным на 4, что вызывает проблемы. Изза этого отладочный вывод не корерктный - нужно либо занулять дворд перед запросом инфы, либо movzx/push.
     
  6. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Mikl___
    Уже кажется увидел
    phoukait
    Инде - от твоих знаний оторопь берет!
    Покажи пальцем что нужно тут поменять чтобы строчка "IsVdmProcess: -1" в окошке Dbgview-ра появилась.
    Ну не всем же дано, а хочется )))

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. includelib  \masm32\lib\ntdll.lib
    6. include \masm32\include\windows.inc
    7. includelib  \masm32\lib\kernel32.lib
    8.  
    9. extern _imp__DbgPrint:dword
    10.  
    11. .data
    12.     IsVdm   db "IsVdmProcess: %X", 13, 10, 0
    13.     _outnumb    dd -1  
    14. .code
    15. Start:
    16.     lea edi,_outnumb
    17.     push    dword ptr [edi]
    18.     push    offset IsVdm
    19.     call    _imp__DbgPrint
    20.     add esp,8
    21.     ret
    22.    
    23. end Start
     
  7. phoukait

    phoukait New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2011
    Сообщения:
    43
    _sheva740
    Во первых нужно определить направление вывода отладочных сообщений. Если имеется отладочный порт, тоесть например приложение запущено под олли, то сообщения в ядро не направляются, а посредством механизма исключений доставляются отладчику, который их выводит. В этом случае ядерные логгеры ничего отображать не будут.
    Во вторых Dbgview не годная тулза. Смотрите вывод через сиську(Syser).
    В третих чтобы не было проблем с очисткой стека для C-конвенций, используйте макро invoke. Mikl их не использует для того, чтобы линкер не вставлял в модуль стабы в виде jmp, что уменьшает размер модуля. Это ведь не малварь, размер не критичен.
     
  8. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    phoukait
    Ну уже легче, спасибо!
    То есть такое Syser отразит? У меня его нет пока.
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. includelib  \masm32\lib\ntdll.lib
    6. include \masm32\include\windows.inc
    7. includelib  \masm32\lib\kernel32.lib
    8.  
    9. DbgPrint proto C :BYTE, :VARARG
    10.  
    11. .data
    12.     IsVdm   db "IsVdmProcess: %X", 13, 10, 0
    13.     _outnumb    dd -1  
    14. .code
    15. Start:
    16.     lea edi,_outnumb
    17.     push    dword ptr [edi]
    18.     push    offset IsVdm
    19.     call    DbgPrint
    20.     add esp,8
    21.     ret
    22. end Start
     
  9. phoukait

    phoukait New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2011
    Сообщения:
    43
    _sheva740
    Код (Text):
    1.       .386
    2.       .model flat, stdcall
    3.       option casemap :none
    4.  
    5.       include \masm32\include\windows.inc
    6.       includelib e:\masm32\lib\ntdll.lib
    7.  
    8. DbgPrint proto C :dword, :vararg
    9.  
    10. CRLF equ 13, 10, 0
    11.  
    12. .data
    13. _outnumb    DWORD 1
    14. $IsVdm  BYTE "IsVdmProcess: -%X", CRLF
    15.  
    16. .code
    17. Ep:
    18.     invoke DbgPrint, addr $IsVdm, _outnumb
    19.     ret
    20. end Ep
    Олли выводит лог, не хуже чем сиська.

    А типы следует ввести полюбому, код с кучей dd, db и без сишных типов не читабелен. Не понятно что какой параметр означает. В директиву proto опционально указывается имя параметра. proto $Message:PSTR даёт понять что это за параметр. Также следует для себя определить префиксы для макро и строк, например я использую префикс % для обозначения макро и $ для строк.
     
  10. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    phoukait
    Спасибо за помощь.