Расширение ROM BIOS

Тема в разделе "WASM.ASSEMBLER", создана пользователем dps86, 16 янв 2009.

  1. dps86

    dps86 New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    28
    я, человек, знакомый с программированием, но мало понимаю в дизассемблировании, крекинге и тд. (надеюсь с помощью этого форума научусь, ну да ладно, проблема следующая)

    выложу часть статьи и пример, которые нашел в инете:

    "модуль представляет собой обычный двоичный файл с размером, кратным 200h байт, всегда загружающийся по адресу xxxx:0000h. Часть оборудования (оперативная память, клавиатура, видеокарта) к моменту его вызова уже инициализирована, а часть (жесткие диски, например) еще нет. Прерывания INT 10h (видео) и INT 16h (клава) можно использовать не боясь, а вот с INT 13h (диски) ничего не получится (то есть, получится, конечно, но не сразу и не просто так)."


    prg segment
    assume cs:prg,ds:prg,es:prg,ss:prg
    org 100h
    start:
    DB 55h, АAh ; загрузочная сигнатура
    DB 01h ; размер блока в 200h байтовых секторах
    jmp x_code ; передача управления нашему коду
    x_code:
    ; подготовка регистров
    ; --------------------
    MOV DX, 101Dh ; куда выводить (DH - Y, DL - X)
    MOV SI, text ; что выводить
    XOR BX,BX ; начальный цвет символов - 1
    MOV CX,1 ; выводим по одному символу

    ; вывод строки в цвете
    ; --------------------
    print_string:
    MOV AH, 02h ; функция управления курсором
    INT 10h ; позиционируем курсор
    INC DL ; перемещаемся на следующую позицию

    LODSB ; загружаем очередной символ
    TEST AL,AL ; конец строки?
    JZ input ; если конец, то выходим

    MOV AH, 09h ; функция печати символа
    INC BL ; перебираем все цвета
    INT 10h ; печатаем символ
    JMP print_string ;мотаем цикл

    input: ; ожидание ввода пароля
    ; ---------------------
    XOR DX,DX ; контрольная сумма
    enters:
    XOR AX,AX ; функция чтения символа с клавы
    INT 16h ; читаем символ
    CMP AL,0Dh ; это ENTER?
    JZ input ; если ENTER, начинаем ввод сначала
    XOR AH,AH ; очистить скан-код
    ADD DX,AX ; считаем CRC
    CMP DX, 'm' + 's' + 'o' + ']' + '['
    JNZ enters ; если это не "мыщъх", продолжаем ввод
    retf
    text db "Matrix has you!",0
    prg ends
    end start

    Пропустив исходный файл через транслятор , мы получим на выходе ххххх.BIN. Загружаем его в HIEW и дополняем нулями до размера кратного 200h байт, затем рассчитываем контрольную сумму. Контрольная сумма рассчитывается стандартным образом: мы просто складываем все байты друг с другом и находим остаток от деления на 100h. Т.е. sum = (sum + next_byte) & 0xFF. Контрольная сумма всего блока должна равняться нулю, следовательно, последний байт блока равен (100h - sum) & 0xFF.

    в строчке "DB 55h, АAh ; загрузочная сигнатура" на самом деле было написано 55h, 0Ah, но с 0Ah файл не компилится, да и на самом деле верная сигнатура для расширения ROM BIOS 55h, АAh.
    приведенный выше пример у меня работает, но выводится не строка "Matrix has you!", а какой -то знак, ввод пароля тоже работает. но самое главное что модуль грузится

    мне же надо написать то же самое, но используя С/С++, т.е. что бы в коде присутствовала ф-ция main.
    я попробовал сделать так:
    (для начала будем вводить просто пароль и при успешном вводе грузиться дальше)


    void main()
    {
    asm
    {
    input: //; ожидание ввода пароля

    XOR DX,DX //; контрольная сумма
    enters:
    XOR AX,AX //; функция чтения символа с клавы
    INT 0x16 //; читаем символ
    CMP AL,0x0D //; это ENTER?
    JZ input //; если ENTER, начинаем ввод сначала
    XOR AH,AH //; очистить скан-код
    ADD DX,AX //; считаем CRC
    CMP DX, 'm' + 's' + 'o'
    JNZ enters //; если это не "мыщ", продолжаем ввод
    ret

    }
    }

    (вот тут в конце не знаю надо ret или retf). получаю экзешник, с помощью exe2bin делаю из него com.
    чтобы модуль грузился, первые 2 байта должны быть 55h, АAh, и еще байт размера следом. но первые 3 байта получаются это байты функции майн (загрузка в стек вроде). я пробовал делать след. образом: писал 3байта которые мне нужны, т.е. 55h, АAh, 01h, а остальной код смещал на 16 байт. затем открывал полученный файл в дебагере, в позиции 4-го байта писал jmp 110h (т.е. джам на мэйн), запоминал код джампа (ЕВ0В) затем открывал файл через двоичный редактор и ручками вписывал код начиная с 4-го байта. затем как описано выше забивал снизу нулями, считал контрольную сумму.
    но данный вариант не работает. (у меня не работает)
    подскажите что нужно сделать.
     
  2. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    И как ты собрался это запускать?
     
  3. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    exst видимо нужно добавить в прошивку биоса свой код..
    помоему подобную статью я видел в журнале "Ламер" ;) гдет 3 летней давности...
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Exp10der
    Я думаю это он в устройство со свои ROM BIOS будет вшивать.

    dps86
    Изучай возможности линкера и компилятора. Тебе нужно корректно собрать бинартный файл всего-то.
     
  5. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    ага или хекс редактором вручную всё лишнее отсечь
     
  6. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    А я бы не стал доверять BIOSу...
     
  7. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    хм... кстати на васме тоже подобная статья лежала тока для микрухи биоса на сетевухе.
    А кстати если нет опыта писания прог без дебаггера - лучше для начала на MBR лоадерах потренироваться там тоже можно прописать облом при загрузке если пароль неверный введён, а биос на матери шить (если нет программатора) своим неотлаженным кодом - короче большая вероятность что придётся выкинуть мать в случае ошибки...
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Exp10der
    А джампы ты что вручшую будешь править? Пилити Шура пилити...
     
  9. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    Pavia неа, я в своё время прожку для этого написал :)
     
  10. dps86

    dps86 New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    28
    может я плохо прочитал, но так и не нашел конкретного объяснения.
    повторю вопрос: можно ли быстро и просто в начало exe файла воткнуть свои 3 байта, да так, чтобы потом все корректно работало??
     
  11. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    dps86 BIOS лоадер PE-формат не воспринемает ни каким местом (это же не win32 тебе) туда надо писать чистый 16 битный код (комп всегда стартует в реальном режиме!) безо всяких левых структур и Pavia тебе уже ответил

    З. Ы. Почитай книжки какие нибудь по железу... статьи из журнала "Ламер" не самое лучшее начало для изучения работы с оборудованием - книжки, даташиты, мануалы - от этого больше толку.
     
  12. dps86

    dps86 New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    28
    извниняюсь за свою надоедливость, но возможно я получил неверный ответ, потому что задал неправильный вопрос.

    повторю вопрос: можно ли быстро и просто в начало com файла, полученного из exe файла воткнуть свои 3 байта, да так, чтобы потом все корректно работало??

    "dps86 BIOS лоадер PE-формат не воспринемает ни каким местом (это же не win32 тебе) туда надо писать чистый 16 битный код (комп всегда стартует в реальном режиме!) безо всяких левых структур и Pavia тебе уже ответил"
    помоему в ком файлах нет РЕ-формата.
    еще раз спасибо за ответ
     
  13. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    тебе нужен бинарный файл без MZ/PE/ELF и ещё каких бы то ни было структур. Короче http://www.wasm.ru/article.php?article=1013001 читайте просвещайтесь - там вроде про формат ром модулей написано...
    а я уже не в состоянии вести дискуссию.. поговорим позже.
     
  14. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
  15. dps86

    dps86 New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    28
    опять я с этой темой!! очень нужна ваша помощь!!

    Exp10der
    2009-01-16 22:52:02
    тебе нужен бинарный файл без MZ/PE/ELF и ещё каких бы то ни было структур. Короче http://www.wasm.ru/article.php?article=1013001 читайте просвещайтесь - там вроде про формат ром модулей написано...
    а я уже не в состоянии вести дискуссию.. поговорим позже.

    мой начальник говорит что можно сделать след образом. (ему позарез надо чтобы прога была на си и он человек толковый, не первый день в программинге, собственно поэтому я тут и пишу, что он говорит одно, а на форуме другое). в начале я ставлю сигнатуру 55АА, ну соответсвенно потом размер а далее переход на прогу на СИ. только он говорит что в проге на СИ надо как то переделать стек и может еще чего. и все должно работать. так ли это? и как скорректировать стек