Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Эксперт быдлокодинга
2083 / 517 / 68
Регистрация: 04.11.2010
Сообщений: 1,293
1

Чтение BIOS ASUS из под DOS

21.08.2015, 23:55. Просмотров 1305. Ответов 15
Метки нет (Все метки)

Доброго всем дня.

Не по теме:

Немного предыстории. Был ноутбук, начал глючить, зависал или синий экран. На синем экране было написано всякое, в т.ч. и попробовать обновить bios. Обновил... В момент когда утилита под винду затерла половину старого биоса комп повис. Разумеется после принудительной перезагрузки оказался в ауте. Ещё бы, biosa то фактически не стало. Полез в интернеты, нарыл схему программатор, затем в бук, выпаял флеш.

Прикол первый, емкость флеши оказалась в два раза больше размера bios. Прикол второй, считанный программатором дамп показал что начало флеши ни хрена не затерто. Дальнейшее шуршание по форумам выявило следующую картину. непосредственно сам bios на флеши занимает половину объема, при том вторую. Первую половину занимает некая прошивка, вроде как под мульт или ещё что, в терминах пока плаваю. При прошивке bios первая половина флеши ни при каких обстоятельствах не изменяется. Трется и шьется вторая половина, именно она представлена на сайте asus как обновление bios. По сути являет собой простой бинарник, хвост которого (тот что затереть не успело) легко нашёлся.

Чет записался. Короче, снес бук в сервис, там мне накатили на флеш дамп. Дамп вроде тот, а вроде и не очень. Сам bios точно мой, я его смог прочитать при помощи asusовской утилиты под DOS и сравнить с biosом на сайте. А вот что натолкали в первую половину большой вопрос. Кой чего работает через жопу, установка всех дров не извела в свойствах системы парочку неопознанных устройств. И родилась у меня идея эту самую DOS утилиту поправить по адресам и считать что там в первой половине флеши сидит.



Пока вопрос общего плана
1. Может ли программа под DOS (exe) вдруг перейти в 32 бита, т.к . если верить IDA pro то
Assembler
1
2
3
4
5
6
7
seg000:0000 ; Format      : MS-DOS executable (EXE)
seg000:0000 ; Base Address: 1000h Range: 10000h-28AD0h Loaded length: 188C3h
seg000:0000 ; Entry Point : 1000:20
seg000:0000
seg000:0000                 .686p
seg000:0000                 .mmx
seg000:0000                 .model large
она же где то в коде... прошу обратить на бог весть откуда взявшиеся ECX, EDX и прочие EAX

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
seg000:3E87 sub_13E87       proc near               ; CODE XREF: sub_140AA+19p
seg000:3E87                 push    ecx
seg000:3E89                 call    sub_141E7
seg000:3E8C                 and     eax, 7FFFFFh
seg000:3E92                 push    eax
seg000:3E94                 mov     ah, 8Bh ; 'Л'
seg000:3E96                 call    sub_14213
seg000:3E99                 mov     dl, al
seg000:3E9B                 call    sub_13F7A
seg000:3E9E                 call    sub_13FC1
seg000:3EA1                 push    eax
seg000:3EA3                 call    sub_13F9E
seg000:3EA6                 call    sub_13FF1
seg000:3EA9                 pop     edx
seg000:3EAB                 call    sub_14065
seg000:3EAE                 pop     ecx
seg000:3EB0                 add     eax, ecx
seg000:3EB3                 adc     edx, 0
seg000:3EB7                 pop     ecx
seg000:3EB9                 retn
seg000:3EB9 sub_13E87       endp
Или это IDA pro козлит?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2015, 23:55
Ответы с готовыми решениями:

Найти bios на Asus pro55s под dos
Здравствуйте, помогите пожалуйста найти загрузочный под dos bios Asus pro55s

Когда DOS был жив, можно ли было переделать windows98 и > драйвера звуковой карты под DOS?
Если я правильно понимаю там прямая запись в порты(если на самом низком уровне) это ведь можно...

Как создать корректную статическую (lib) библиотеку под MS-DOS (16 bit) из Windos (32-64 bit) или из MS-DOS?
Привет всем! Кто подскажет, как корректно создавать статические библиотеки для 16-битного режима...

Переписать BIOS для ASUS P5B-V BIOS AMI 1211 от 2008г
Доброе время суток... Я "консерватор" компу уже лет наверное 10.. но пока даети мне все ято мне...

15
Клюг
7664 / 3179 / 382
Регистрация: 03.05.2011
Сообщений: 8,381
22.08.2015, 02:27 2
Можно же дать сегменту аттрибут USE32: https://www.cyberforum.ru/post2784506.html
1
3076 / 1670 / 447
Регистрация: 28.02.2015
Сообщений: 3,353
22.08.2015, 12:44 3
Цитата Сообщение от Полный 30h Посмотреть сообщение
Может ли программа под DOS (exe) вдруг перейти в 32 бита
Элементарно, перед запуском Bоот-сектора с диска, Bios переходит в защищенный режим и проверяет, к примеру количество доступной памяти, кроме всего прочего.
1
Клюг
7664 / 3179 / 382
Регистрация: 03.05.2011
Сообщений: 8,381
22.08.2015, 13:20 4
Полный 30h, ещё почитай про Unreal mode и у Ральфа про LOADALL в Interrupt List, Part D.
1
1321 / 483 / 67
Регистрация: 21.07.2015
Сообщений: 1,243
22.08.2015, 13:24 5
Цитата Сообщение от Полный 30h Посмотреть сообщение
Может ли программа под DOS (exe) вдруг перейти в 32 бита, т.к . если верить IDA pro то
Вот так прямо взять и перейти не может. Для этого должен быть соответствующий код, который корректно отключает режим совместимости (переводит в защищенный режим). В исходнике можно указать откуда начитается 32х-разрядный код, правда для каждого компилятора это специфично.

Цитата Сообщение от Полный 30h Посмотреть сообщение
прошу обратить на бог весть откуда взявшиеся ECX, EDX и прочие EAX
К этим регистрам вполне можно обращаться в обычном 16-ти разрядном режиме. Не совсем ясно откуда вывод, что программа работает под 32 бита.
0
3076 / 1670 / 447
Регистрация: 28.02.2015
Сообщений: 3,353
22.08.2015, 13:34 6
Цитата Сообщение от shmkv Посмотреть сообщение
Для этого должен быть соответствующий код.
...
для каждого компилятора это специфично
Код там есть, нужно смотреть что происходит после передачи управления на 0хFFFF0.
Вопрос не в компиляции, а в декомпиляции кода написанного производителем ASUS.

Добавлено через 2 минуты
Цитата Сообщение от shmkv Посмотреть сообщение
Не совсем ясно откуда вывод, что программа работает под 32 бита.
Проверьте память больше метра а реале, если сейчас только одна планка памяти больше гектара.
0
1321 / 483 / 67
Регистрация: 21.07.2015
Сообщений: 1,243
22.08.2015, 13:48 7
Цитата Сообщение от Constantin Cat Посмотреть сообщение
а в декомпиляции кода написанного производителем ASUS.
Не один из известных мне дизассемблеров не распознает переход в PM32.
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Проверьте память больше метра а реале, если сейчас только одна планка памяти больше гектара.
Ну если формально подходить к вопросу, то можно. Например, есть соответствующий сервис BIOS (int 15h) для записи/чтения памяти. Есть более хитрые способы вроде т. н. нереального режима (который на самом деле отдельным режимом не является). Вопреки расхожему мнению, 32-битовая адресация в реальном режиме допустима. И вопрос-то к чему? Я не вижу в коде вообще никакого доступа к памяти.

Добавлено через 4 минуты
По поводу 32х-битовой адресации все интереснее: по идее BIOS должен обеспечить максимальную совместимость: ну т. е. загрузить предел 1 Мб + 64К, чтобы срабатывала защита при доступе куда-то дальше. На практике очень часто это не так и можно адресовать всю память без всяких лишних переключений режимов.
0
3076 / 1670 / 447
Регистрация: 28.02.2015
Сообщений: 3,353
22.08.2015, 14:31 8
Цитата Сообщение от shmkv Посмотреть сообщение
Не один из известных мне дизассемблеров не распознает переход в PM32
Это не его задача, он должен кодеру показть, что там написано, а уже происходящее(планируемое) воспринимает сам кодер(кто, кому и сколько должен).

Добавлено через 4 минуты
Цитата Сообщение от Полный 30h Посмотреть сообщение
прошу обратить на бог весть откуда взявшиеся . . .
именно отсюда .686p компилятор уже знает, что ему доступно, а это 32-а бита и остальное.
1
Эксперт быдлокодинга
2083 / 517 / 68
Регистрация: 04.11.2010
Сообщений: 1,293
22.08.2015, 16:27  [ТС] 9
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Можно же дать сегменту аттрибут USE32: Написать программу, выводящую строку "Hello World" на экран
Перед тем как задать этот вопрос я естественно попробовал в fasme сам воткнуть в dos программу 32 битные регистры и даже без атрибутов и даже без сегментов. В обычный com. И они воткнулись... Более того, дальнейшая декомпиляция показала, что компилятор не делал мне скидку на убогость, переправляя EAX в AX тихой сапой. А по честному скомпилировал программу с EAX. Удивление и вопрос мой был от того, что ни у каких Калашниковых и в прочей литературе с примерами я и видеть не видывал таких вольностей с разрядами. Оттого и возник вопрос.
Ну это примерно как если бы всю жизнь тебя через забор лазить учили, а когда ты решил перелезть сам и нашёл реальный забор, вдруг оказалось что в нём калитка есть. И в неё даже ходят.

Цитата Сообщение от Constantin Cat Посмотреть сообщение
Элементарно, перед запуском Bоот-сектора с диска, Bios переходит в защищенный режим и проверяет, к примеру количество доступной памяти, кроме всего прочего.
А ничего что эта программа запускается из под DOS 6.22? Который по идее предполагает реальный режим и стартует с загрузочной флешки сразу после bios. Она же кстати и сам bios как читать, так и шить может. Т.е. на сколько я понимаю должна работать с реальными адресами, что бы попасть на флеш память где этот сам bios сидит.

Цитата Сообщение от Charles Kludge Посмотреть сообщение
Полный 30h, ещё почитай про Unreal mode и у Ральфа про LOADALL в Interrupt List, Part D.
По первой ссылке прочитал, перевариваю. По второй увы - нихт ферштейн.

Цитата Сообщение от shmkv Посмотреть сообщение
К этим регистрам вполне можно обращаться в обычном 16-ти разрядном режиме. Не совсем ясно откуда вывод, что программа работает под 32 бита.
До сегодняшнего дня полагал, что 16 бит не предполагают технической возможности передачи 32 бит за раз. Если это не так и к примеру можно выполнить and eax, 7FFFFFh то это уже 32 битное представление, со всеми вытекающими терминами.

Цитата Сообщение от Constantin Cat Посмотреть сообщение
именно отсюда .686p компилятор уже знает, что ему доступно, а это 32-а бита и остальное.
Ок. Пока приму как данность, в процессе попытаюсь понять.

Господа товарищи,очередной вопрос по данной программе. Код начинается с
Assembler
1
2
3
start:                                  
int     12h             ; Return: AX = number of contiguous 1K blocks of memory
mov     ax, seg seg001
Спрашивается, чего я опять упустил (не понял). Ведь прерывание int 12h предполагает ответ в AX. Который почему то игнорируется и попросту затирается следующей командой. Можно прийти к выводу что первая команда это рудимент переписанного кода. Или есть какая то фишка?
0
1321 / 483 / 67
Регистрация: 21.07.2015
Сообщений: 1,243
22.08.2015, 16:47 10
Цитата Сообщение от Полный 30h Посмотреть сообщение
Т.е. на сколько я понимаю должна работать с реальными адресами, что бы попасть на флеш память где этот сам bios сидит.
Необязательно.
Цитата Сообщение от Полный 30h Посмотреть сообщение
примеру можно выполнить and eax, 7FFFFFh
А кто мешает?
Цитата Сообщение от Полный 30h Посмотреть сообщение
Можно прийти к выводу что первая команда это рудимент переписанного кода.
А можно прийти к выводу, что в конкретной реализации BIOS она делает что-то недокументированное.

Добавлено через 6 минут
Штука вот какая: для реального режима к коду команды компилятор ставит специальный префикс, что она 32х-разрядная. А для 32х-разрядного кода все наоборот.
0
Эксперт быдлокодинга
2083 / 517 / 68
Регистрация: 04.11.2010
Сообщений: 1,293
22.08.2015, 17:02  [ТС] 11
Цитата Сообщение от shmkv Посмотреть сообщение
Не обязательно.
Месье знает способ перепрошивки ячеек микросхемы без знания их точных адресов?!
Цитата Сообщение от shmkv Посмотреть сообщение
А кто мешает?
Здравый смысл и логика. Вас не затруднит представить число 1048575 при помощи 16 бит например в двочной системе.
Цитата Сообщение от shmkv Посмотреть сообщение
А можно прийти к выводу, что в конкретной реализации BIOS она делает что-то недокументированное.
Картина маслом, разработчики ПО пишут софт под стандартизированные функции bios, а asus бабах! шлет всех нахер и пихает в стандартную функцию свою фенечку. Допущение из разряда - мерседес под кнопку клаксона включение освещение салона сделал.
0
1321 / 483 / 67
Регистрация: 21.07.2015
Сообщений: 1,243
22.08.2015, 22:36 12
Цитата Сообщение от Полный 30h Посмотреть сообщение
Месье знает способ перепрошивки ячеек микросхемы без знания их точных адресов?!
Месье знает, например, как можно получить доступ к адресному пространству PCI, CMOS и т.д. через порты? И, если знает, то почему это не может быть использовано для Flash? Есть какая-то спецификация обязывающая производителей материнских плат осуществлять полный доступ к Flash именно через физическую память?

Добавлено через 8 минут
Цитата Сообщение от Полный 30h Посмотреть сообщение
Вас не затруднит представить число 1048575 при помощи 16 бит например в двочной системе.
А зачем представлять именно в 16 бит!? 32х-битовые операции используют 32х-битовые операнды. Может стоит почитать что-то вроде "intel instruction set reference manual" прежде чем задавать такие вопросы?

Добавлено через 2 минуты
Цитата Сообщение от Полный 30h Посмотреть сообщение
Картина маслом, разработчики ПО пишут софт под стандартизированные функции bios, а asus бабах! шлет всех нахер и пихает в стандартную функцию свою фенечку. Допущение из разряда - мерседес под кнопку клаксона включение освещение салона сделал.
А у месье богатый опыт изучения реализаций различных БИОСов? Я вот при дизассемблировании VGA BIOS и не такое видел.

Добавлено через 8 минут
Да, адреса знать надо. Но, что тогда подразумевается под термином "реальные адреса", если не адрес в физической памяти?
0
3076 / 1670 / 447
Регистрация: 28.02.2015
Сообщений: 3,353
22.08.2015, 22:55 13
Цитата Сообщение от Полный 30h Посмотреть сообщение
int * * 12h
Ralf Brown's Interrupt List
BIOS - GET MEMORY SIZE
Return:AX = kilobytes of contiguous memory starting at absolute address 00000h
Note: This call returns the contents of the word at 0040h:0013h; in PC and XT, this value is set from the switches on the motherboard
Думаю, что сам размер памяти не важен(метры-раньше против гектаров-сейчас), главное какие атрибуты/параметры/флаги при этом меняются
1
Эксперт быдлокодинга
2083 / 517 / 68
Регистрация: 04.11.2010
Сообщений: 1,293
23.08.2015, 08:32  [ТС] 14
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Думаю, что сам размер памяти не важен(метры-раньше против гектаров-сейчас), главное какие атрибуты/параметры/флаги при этом меняются
Флаги однозначно нет, буквально через пару команд они изменяются командой test. А вот то что вы привели в Note как раз таки объясняет ситуацию. Оказывается функция помимо возврата значения в регистр AX ещё к тому пишет это значение по адресу 0040h:0013h. И скорее всего где то по коду его потом оттуда использует.

shmkv, большое спасибо за интересный рассказ о недокументированных возможностях biosa asus и доступ ко всему через порты. Но в этом вопросе всё уже немного прояснилось.
0
1321 / 483 / 67
Регистрация: 21.07.2015
Сообщений: 1,243
23.08.2015, 22:31 15
Цитата Сообщение от Полный 30h Посмотреть сообщение
А вот то что вы привели в Note как раз таки объясняет ситуацию. Оказывается функция помимо возврата значения в регистр AX ещё к тому пишет это значение по адресу 0040h:0013h.
На самом деле в цитате написано, что прерывание возвращает слово по адресу 0040h:0013h. Про запись куда-либо ничего не сказано.
0
Эксперт быдлокодинга
2083 / 517 / 68
Регистрация: 04.11.2010
Сообщений: 1,293
23.08.2015, 22:43  [ТС] 16
shmkv, я сейчас не готов к обсуждению филологических аспектов.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2015, 22:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

ASUS X553MA - задал Administrator Password в BIOS, теперь надо его убрать (сижу в BIOS-е)
На ноутбуке ASUS X553MA, только что купленном собирался переставить винду. После отключения Secure...

Неправильно работающая функция, yasm, BIOS, без DOS
Написал функция, которая с помощью BIOS рисует на экране прямоугольник. При первом вызове -...

Чтение секторов жёсткого в DOS
Добрый вечер! Проблема заключается именно в том, что программа должна работать под DOS, и ей не...

Вывод значения регистра флагов в двоичной системе счисления без использования прерывной DOS и BIOS
Завтра экзамен, препод оказался очень добрым и выдал билет за день, что бы лучше подготовиться) но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.