masm32 вставляет int 3

Тема в разделе "WASM.ASSEMBLER", создана пользователем Intercepter, 30 сен 2005.

  1. Intercepter

    Intercepter New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2005
    Сообщения:
    14
    Адрес:
    Russia
    почему компилятор masm32 сам (в исходнике я вообще не вспоминал про int 3) вставляет дебажное прерывание в код драйвера? Опции компиляции вполне тривиальные:



    f:\masm32\bin\ml.exe /nologo /c /coff %1.asm

    f:\masm32\bin\link.exe /nologo /driver /base:0x10000 /align:32 /out:%1.sys /subsystem:native %1.obj



    , компилится и линкуется без проблем.
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Intercepter

    Куда именно вставляет, в код функций или просто в файл?
     
  3. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    наверняка это выравнивание

    масм выранивает 0CCh, 090h, 00h и ещё чем-то, не помню уже

    но в любом случае - это всего лишь файловое выравнивание

    для проверки попробу написать в коде align 16 и посмотреть его в hex редакторе
     
  4. Intercepter

    Intercepter New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2005
    Сообщения:
    14
    Адрес:
    Russia
    IceStudent

    в драйвер .sys, конкретно в процедуру DriverEntry:



    .text:00010457 ; ---------------------------------------------------------------------- -----

    .text:00010457

    .text:00010457 loc_10457: ; CODE XREF: start+42j

    .text:00010457 push [ebp+DeviceObject] ; DeviceObject

    .text:0001045A call IoDeleteDevice

    .text:0001045F

    .text:0001045F loc_1045F: ; CODE XREF: start+2Fj

    .text:0001045F ; start+6Aj

    .text:0001045F int 3 ; Trap to Debugger

    .text:0001045F start endp



    int 3 это CCh, но на выравнивание не похоже (хотя в данном примере да, align 16), но если скажем добавить еще одну команду в тело DriverEntry, то хвост будет таким:



    .text:00010459 ; ---------------------------------------------------------------------- -----

    .text:00010459

    .text:00010459 loc_10459: ; CODE XREF: start+44j

    .text:00010459 push [ebp+DeviceObject] ; DeviceObject

    .text:0001045C call IoDeleteDevice

    .text:00010461

    .text:00010461 loc_10461: ; CODE XREF: start+31j

    .text:00010461 ; start+6Cj

    .text:00010461 int 3 ; Trap to Debugger

    .text:00010461 start endp
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Незнаю почему у тебя так .. но у меня при таких же параметрах:

    E:\ASM\masm32\bin\ml /nologo /c /coff %drv%.asm

    E:\ASM\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native /ignore:4078 %drv%.obj



    ида выдает (весь код из процедуры DriverEntry) :

    000108E0 push ebp

    000108E1 mov ebp, esp

    000108E3 add esp, 0FFFFFF80h

    000108E6 push offset aDriverentry ; "-------DriverEntry------\r\n"

    000108EB call j_DbgPrint

    000108F0 add esp, 4

    000108F3 mov [ebp+var_4], 0C0000182h

    000108FA lea eax, [ebp+var_8]

    000108FD push eax

    000108FE push 0

    00010900 push 100h

    00010905 push 12h

    00010907 push offset unk_108A0

    0001090C push 0

    0001090E push [ebp+arg_0]

    00010911 call j_IoCreateDevice

    00010916 or eax, eax

    00010918 jnz loc_10A65

    0001091E push offset unk_108A0

    00010923 push offset unk_108C4

    00010928 call j_IoCreateSymbolicLink

    0001092D or eax, eax

    0001092F jnz loc_10A5D

    00010935 push 6Ch

    00010937 lea eax, [ebp+var_78]

    0001093A push eax

    0001093B call j_RtlZeroMemory



    ----------------------------



    000109D2 cmp [ebp+var_4], 0

    000109D6 jz short loc_10A10

    000109D8 push offset unk_108C4

    000109DD call j_IoDeleteSymbolicLink

    000109E2 push [ebp+var_8]

    000109E5 call j_IoDeleteDevice

    000109EA push offset aRegisterFault ; "-------Register Fault------\r\n"

    000109EF call j_DbgPrint



    как видишь и при старте и выгрузке у меня нет никаких int 3. Видимо ты где-то в макросах намудрил или еще чего .. Сомневаюсь что виноват компилятор.
     
  6. Intercepter

    Intercepter New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2005
    Сообщения:
    14
    Адрес:
    Russia
    TermoSINteZ

    Хе! Поставил ret в конец DriverEntry и INT 3 как не бывало :). masm32 v8.2.