LINUX.ORG.RU

[лень][x86]DEBUG MBR

 ,


0

0

собственно может кому приходилось писать или же знает где уже есть существующий код с минимальными средствами для отладки помещающийся в MBR. основное требование: код должен быть PIC т.к. точно не известно куда именно бутлоадер железки считывает MBR. в «родном» образе диска в MBR мягко говоря неведомый код который только дергает неизвестную функцию и считывает PBS в 0x7C00 даже не пытаясь переместить себя в другую область памяти.

мало инфы чтобы ваще хоть чтото ответить
что за железка ? x86 ?
у ней есть встроенный загрузчик который считывает дальше систему с диска ?

ae1234 ★★
()
Ответ на: комментарий от anon_666

x86 в названии ваще ниочем говорит - а тем более сочетание [лень][x86] мож то ник такой хитрый - иль откудато скопипастено

ae1234 ★★
()
Ответ на: комментарий от ae1234

Нет, я таки не телепат, а вот по тебе сразу видно что недавно на ЛОРе, ибо это ни что иное как набор «тегов», которые тут используют повсеместно :-)

Cy6erBr4in ★★★
()

подобное не вытворял, хотя это довольно интересно.
честно говоря, не знаю, можно ли уместить в 440 байт (~200-300 инструкций) MBR какой-нибудь дебаг, но о printf даже не мечтай :)

вообще на момент вызова загрузчика из mbr ему в регистрах передается всякая board-specific информация. можно попробовать найти и инфо о консоли (базовый адрес UART регистров). саму структуру, думаю, можно подглядеть в исходниках u-boot-а (он умеет i386) (struct bd_info, arch/i386/include/asm/u-boot.h, gd_t, .../global_data.h), а именно в функции, которая дергает ядро. или как вариант поискать, может быть это адрес передается в регистре.
получишь адрес - сможешь выводить побайтно какую-нибудь информацию.
инициализировать uart скорей всего не придется (после загрузчика-то...). а банальную конверсию int2str я на асме писал еще на 2-ом курсе^W^W^W в школе для развлечения. ничего сложного нет. примеров в сети д.б. тонны.
что касается relocatable, адреса надо будет писать в виде смещений, тогда проблем возникнуть не должно (префиксы short ptr, short offset, насколько я помню)

кстати, можно посмотреть в исходниках, не устанавливал ли загрузчик какие-либо прерывания (по типу int 10h в BIOS).

xydo ★★
()
Ответ на: комментарий от xydo

и,да, упустил момент, свой MBR тебе скорей всего придется писать на асме, а потом конвертить в binary формат через objcopy.
или как вариант:
dd if=/dev/hda of=loader bs=512 count=1
objdump -d loader >loader.S
:)

xydo ★★
()
Ответ на: комментарий от xydo

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

exception13 ★★★★★
() автор топика
Ответ на: комментарий от ae1234

тонкий клиент Compaq Evo T30. недобиос заточен под прямую загрузку nk.bin (WinCE kernel) из nand флэша. но так же если на этот nand флэш запилить файло filesys0.img то оно эмулирует средствами биоса жесткий диск. засада в том что обычные mbr работающие в qemu там не работают и соответственно наоборот.

exception13 ★★★★★
() автор топика
Ответ на: комментарий от exception13

на то что код как бэ загружен на 0x7c00 не обращай внимания. реально код похоже грузится в другую область т.к. не вижу попыток переместить себя для освобождения места под загрузку PBS

exception13 ★★★★★
() автор топика
Ответ на: комментарий от xydo

>>так сначала биос грузит по 0000:7c00 (пруф), а мбр уже грузит по 1000:7c00 (es перенастраивается)

как говорил выше этот mbr принципиально не работает в qemu и наоборот то что работает в qemu не хочет работать на реальной железке.

exception13 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.