Странный код.

Тема в разделе "WASM.BEGINNERS", создана пользователем Mika0x65, 25 май 2007.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Мое почтение всем.

    Дизассемблирую одну программку, получающую управление из MBR. Наткнулся на такой код:

    Код (Text):
    1. seg000:2BD1 loc_12BD1:                              ; CODE XREF: sub_12BC0+Ej
    2. ...
    3. seg000:2BD4                 call    kb_get_enhanced_keystroke
    4. seg000:2BD7                 mov     si, ds:kb_scan_ASCII
    5. seg000:2BDB                 call    kb_get_enhanced_keystroke
    6. seg000:2BDE                 mov     di, ds:kb_scan_ASCII
    7. seg000:2BE2                 cmp     si, 2400h
    8. seg000:2BE6                 jnz     short loc_12BF3
    9. seg000:2BE8                 cmp     di, 9400h
    10. seg000:2BEC                 jnz     short loc_12BF3
    11. seg000:2BEE                 call    sub_12FA0
    12. seg000:2BF1                 jmp     short loc_12C02
    13. ...
    14. seg000:2E52 kb_get_enhanced_keystroke proc near     ; CODE XREF: sub_12BC0+14p
    15. seg000:2E52                                         ; sub_12BC0+1Bp
    16. seg000:2E52                 pusha
    17. seg000:2E53                 mov     ah, 10h
    18. seg000:2E55                 int     16h             ; KEYBOARD - GET ENHANCED KEYSTROKE (AT model 339,XT2,XT286,PS)
    19. seg000:2E55                                         ; Return: AH = scan code, AL = character
    20. seg000:2E57                 mov     cs:kb_scan_ASCII, ax
    21. seg000:2E5B                 mov     cs:kb_ASCII, al
    22. seg000:2E5F                 mov     cs:kb_scan, ah
    23. seg000:2E64                 popa
    24. seg000:2E65                 retn
    25. seg000:2E65 kb_get_enhanced_keystroke endp
    26. ...
    Если верить этой таблице скан кодов, то 0x24 -- код клавиши j, ее же ASCII -- 0x6A. Получается, что условие никогда не выполнится... М.б. я в чем-то ошибаюсь? Причем, подобный код встречается в программе не один раз... Any ideas?

    Заранее благодарен.
     
  2. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Юникод? другая кодировка?
    Может там китайскую клавиатуру граббит.. ))
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Не знаю, поддерживает ли BIOS Unicode. М.б. дело и в "китайском" -- программу (предположительно) писали тайваньцы. Но не совсем понятно, как работать с этим чудом: там во всех проверках ASCII с нулем сравнивается...
     
  4. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Какая кодировка в MBR? Судя по этому куску кода, его писал либо человек, не знающий ассемблера, либо какой-то страшный ЯВУ. А что за программка? Загрузчик какой?
    ЗЫ функции эти возвращаюи в AL ноль есль нажата не буквоцифра. Возможно оно проверяет Ctrl+что-нибудь , Alt или Shift
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    >Какая кодировка в MBR?

    MBR вообще не выводит никаких строк.

    >Судя по этому куску кода, его писал либо человек, не знающий ассемблера, либо какой-то страшный ЯВУ.

    Это еще цветочки. Я уже столького натерпелся от этого исходника. Например:
    Код (Text):
    1. seg000:2C05 sub_12C05       proc near               ; CODE XREF: sub_12ACD+9Ep
    2. seg000:2C05                 mov     ax, 2A22h
    3. seg000:2C08                 shr     ax, 0Ah
    4. seg000:2C0B                 inc     ax              ; ax = 0xB
    5. seg000:2C0C                 cmp     ax, 7
    6. seg000:2C0F                 jnz     short loc_12C12
    7. seg000:2C11                 inc     ax
    8. seg000:2C12
    9. seg000:2C12 loc_12C12:                              ; CODE XREF: sub_12C05+Aj
    10. seg000:2C12                 xor     cx, cx
    11. seg000:2C14                 mov     es, cx
    12. seg000:2C16                 mov     dx, es:413h     ; dx: BASE MEMORY SIZE IN KBYTES
    13. seg000:2C1B                 cmp     dx, 280h
    14. seg000:2C1F                 jz      short loc_12C22
    15. seg000:2C21                 dec     dx
    16. seg000:2C22
    17. seg000:2C22 loc_12C22:                              ; CODE XREF: sub_12C05+1Aj
    18. seg000:2C22                 sub     dx, ax
    На ЯВУ не похоже. Ни стековых кадров ни какой-нибудь шаблонности.

    >А что за программка? Загрузчик какой?

    Близко к этому. Это загрузчик программы управления устройством Magic Card Plus 7.0. Возможно, там же находится и сама программа управления устройством, не только загрузчик.

    >ЗЫ функции эти возвращаюи в AL ноль есль нажата не буквоцифра. Возможно оно проверяет Ctrl+что-нибудь , Alt или Shift

    О, а это уже интереснее. Т.е. эта табличка некорректна?
     
  6. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    > MBR вообще не выводит никаких строк.
    Это был не вопрос, а удивление :derisive:
    2400h соответствует Alt-J а 9400h - Ctrl-Tab