Olly Debugger не распознает инструкции, в чем проблема?

Тема в разделе "WASM.BEGINNERS", создана пользователем zvm4, 23 янв 2011.

  1. zvm4

    zvm4 New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2010
    Сообщения:
    3
    Всем доброй ночи, я недавно начал изучать ассемблер, столкнулся со следующей проблемой
    Моя функция:

    GetPathFile proc lpPathToFile:lol: WORD, lpFileName:lol: WORD, lpFullPath:lol: WORD
    invoke LenghtString, lpFullPath
    cmp EAX, NULL
    jz FillPathFile
    invoke ClearString, lpFullPath

    FillPathFile:
    invoke CopyString, lpFullPath, lpPathToFile
    invoke LenghtString, lpFullPath
    mov EDI, lpFullPath
    add EDI, EAX
    mov byte ptr [EDI], '\'
    ret
    GetPathFile endp

    все нормально компилируется
    X:\ASM\masm32\Bin\ML.EXE /Zi /c /coff /Cp /nologo /I"X:\ASM\masm32\Include" "Starter.asm"
    X:\ASM\masm32\Bin\LINK.EXE /DEBUG /SUBSYSTEM:CONSOLE /RELEASE /VERSION:4.0 /LIBPATH:"X:\ASM\masm32\Lib"

    В OllyDbg вижу следующий вызов моей функции:
    004011A5 |. 66:50 PUSH AX ; /Arg3
    004011A7 |. 68 83364000 PUSH Starter.00403683 ; |Arg2 = 00403683
    004011AC |. 68 0E334000 PUSH OFFSET Starter.Bases1CDir ; |Arg1 = 0040330E ASCII "d:\Bases1C\"
    004011B1 |. E8 A1000000 CALL Starter.GetPathFile ; \GetPathFile

    Сама функция в OllyDbg:
    00401257 > $ 55 PUSH EBP
    00401258 . 8BEC MOV EBP, ESP
    0040125A . FF75 10 PUSH DWORD PTR SS:[EBP+10]
    0040125D . E8 67000000 CALL Starter.LenghtString
    00401262 . 83F8 00 CMP EAX, 0
    00401265 . 74 08 JE SHORT Starter.0040126F
    00401267 . FF75 10 PUSH DWORD PTR SS:[EBP+10]
    0040126A . E8 A5000000 CALL Starter.ClearString
    0040126F > FF75 08 PUSH DWORD PTR SS:[EBP+8]
    00401272 . FF75 10 PUSH DWORD PTR SS:[EBP+10]
    00401275 . E8 64000000 CALL Starter.CopyString
    0040127A . FF75 10 PUSH DWORD PTR SS:[EBP+10]
    0040127D . E8 47000000 CALL Starter.LenghtString
    00401282 . 8B7D 10 MOV EDI, DWORD PTR SS:[EBP+10]
    00401285 03 DB 03
    00401286 > F8 DB F8
    00401287 C6 DB C6
    00401288 07 DB 07
    00401289 5C DB 5C ; CHAR '\'
    0040128A C9 DB C9
    0040128B > C2 DB C2
    0040128C > 0C DB 0C
    0040128D > 00 DB 00

    последние 9 строк отладчик не распознал, у меня ошибка в коде или это баг отладчика?
    код работоспособен, меня смущают последние строки, можно что нибудь сделать чтобы они выглядели как:

    add EDI, EAX
    mov byte ptr [EDI], '\'
    ret


    add EDI, EAX
    00401285 03 DB 03
    00401286 > F8 DB F8

    mov byte ptr [EDI], '\'
    00401287 C6 DB C6
    00401288 07 DB 07
    00401289 5C DB 5C ; CHAR '\'

    ret
    0040128A C9 DB C9
    0040128B > C2 DB C2
    0040128C > 0C DB 0C
    0040128D > 00 DB 00

    и ещё у меня вопрос, почему последняя инструкция RET, занимает 4 байта

    Можно ли код:
    mov EDI, lpFullPath
    add EDI, EAX
    mov byte ptr [EDI], '\'
    уменьшить в одну строку?

    Заранее всем кто откликнется огромное спасибо.
     
  2. dr_godsl

    dr_godsl New Member

    Публикаций:
    0
    Регистрация:
    13 дек 2009
    Сообщения:
    60
    1. хз, вбил к себе твой кодес все нормально видно
    Код (Text):
    1. CPU Disasm
    2. Address   Hex dump          Command                                  Comments
    3. 00401225  /$  55            PUSH EBP                                 ; dummy for ClearString
    4. 00401226  |.  8BEC          MOV EBP,ESP
    5. 00401228  |.  C9            LEAVE
    6. 00401229  \.  C2 0400       RETN 4
    7. 0040122C  /$  55            PUSH EBP                                 ; dummy for LenghtString
    8. 0040122D  |.  8BEC          MOV EBP,ESP
    9. 0040122F  |.  C9            LEAVE
    10. 00401230  \.  C2 0400       RETN 4
    11. 00401233  /$  55            PUSH EBP                                 ; dummy for CopyString
    12. 00401234  |.  8BEC          MOV EBP,ESP
    13. 00401236  |.  C9            LEAVE
    14. 00401237  \.  C2 0800       RETN 8
    15. 0040123A  /$  55            PUSH EBP                                 ; GetPathFile
    16. 0040123B  |.  8BEC          MOV EBP,ESP
    17. 0040123D  |.  FF75 10       PUSH DWORD PTR SS:[Arg3]                 ; /Arg1 => [Arg3]
    18. 00401240  |.  E8 E7FFFFFF   CALL 0040122C                            ; \shablon.0040122C
    19. 00401245  |.  83F8 00       CMP EAX,0
    20. 00401248  |.  74 08         JE SHORT 00401252
    21. 0040124A  |.  FF75 10       PUSH DWORD PTR SS:[Arg3]                 ; /Arg1 => [Arg3]
    22. 0040124D  |.  E8 D3FFFFFF   CALL 00401225                            ; \shablon.00401225
    23. 00401252  |>  FF75 08       PUSH DWORD PTR SS:[Arg1]                 ; /Arg2 => [Arg1]
    24. 00401255  |.  FF75 10       PUSH DWORD PTR SS:[Arg3]                 ; |Arg1 => [Arg3]
    25. 00401258  |.  E8 D6FFFFFF   CALL 00401233                            ; \shablon.00401233
    26. 0040125D  |.  FF75 10       PUSH DWORD PTR SS:[Arg3]                 ; /Arg1 => [Arg3]
    27. 00401260  |.  E8 C7FFFFFF   CALL 0040122C                            ; \shablon.0040122C
    28. 00401265  |.  8B7D 10       MOV EDI,DWORD PTR SS:[Arg3]
    29. 00401268  |.  03F8          ADD EDI,EAX
    30. 0040126A  |.  C607 5C       MOV BYTE PTR DS:[EDI],5C
    31. 0040126D  |.  C9            LEAVE
    32. 0040126E  \.  C2 0C00       RETN 0C
    2. лучше так
    Код (Text):
    1.     invoke LenghtString, lpFullPath
    2.     add eax,lpFullPath
    3.     mov byte ptr [eax],'\'
    3. Ответ в листинге
     
  3. zvm4

    zvm4 New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2010
    Сообщения:
    3
    Я нашёл причину, вся проблема была в том что я компилировал с включенным режимом /Zi
    а линковал с /DEBUG
    как только отключил, сразу всё нормально стало отображаться.
     
  4. zvm4

    zvm4 New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2010
    Сообщения:
    3
    dr_godsl, огромное спасибо за уделенное мне время!