что то вот не получается запустить,где туплю не понимаю. суть такова:я копирую сам себя с адреса 7с00 до 0600 ок. дальше я читаю сектор,допустим второй.из 0-го сектора я скопировал 512 байт то есть по идее я скопировал mbr венды,скопировал я его в этот второй сектор,его пытаюсь читать через 02h int 13h таким вот макаром Code: xor ax,ax ; тут у нас адрес будет в виде сегмент:смещение 0000:7с00 mov es, ax mov bx, 7C00h mov al, 1 mov ch, 0 mov cl, 3 ; сектор 2 тк отсчет от 0 mov dh, 0 mov dl, 80h int 13h после этого я джампаю на 7C00. записал boot сектор на вм- при включении тупо виснет. в чем собсно может быть проблема?
0-й сектор =1 в младшем байте,следовательно: 1-й сектор =2 2-й сектор =3 а вообще даже не в том дело,я и так и эдак извращался с положением оригинального mbr, но все равно не пахало.
зачем удалил мой пост о загрузчике? если лично для тебя не интересен/сложен, то кому-то может быть и нужным.
так во первых я не модер,и посты удалять я не могу в этом разделе,видимо модер посчитал нужным удалить посты. во вторых со слешем мы где то натупили.понимаете отлаживать эту херню крайне неудобно,я понял пока что когда мы джампаем то попадаем в адрес без кода,а так не должно быть,почему пока разбираюсь
2 DooD, копирни оригинальный загрузчик - прогони в IDA. И погляди как там и чего. Вот тебе FASM версия winXP boot 2 altblitz, ты не понимаешь о чем идет речь. почитай http://goo.gl/k4lOI
за ссылку спс,посмотрю.а ида что то выеб*ется,открывает как бинарь с одними db инструкциями. у меня подозрение что в каком то моменте я затираю сам свой код,а где ток не понятно.
блина уже вроде все правильно делаю,кто может проверьте у себя,мне варя говорит что я запускаю не запускаемую память мля(( mbr должен быть во втором секторе. и если кто знает как привинтить виртуальную машину к дебаггеру в ида?.
Боюсь что altblitz прав, скорее всего загружаемый код уже ожидает что процессор уже переведен в 32-битный режим.
ребятушки-котятушки, мой mbr не должен переводить проц в ЗР,потому что он должен всего лишь передать управление на код в памяти,этот код будет mbr венды который сам преркасно все должен загрузить.
Выведи в своем загрузчике начало кода, который ты загрузил в память, и выведи его на экран. Потом сравни его с реальным кодом MBR, совпадают ли они. Может ты вообще что-то не то загружаешь. Таким образом ты хотя бы на сто процентов убедишься что код стороннего MBR не битый после загрузки в память. К сожалению, у меня нет под рукой винды. Но если сам не решишь проблемы - могу помочь, пока время есть (пара дней).
не будет Win загружать такой код. потому что твой метод записи MBR - капец компам органам безопасности и быстрого реагирования. это изначально заложено в ОСь, чтобы мальчики-шалуны не баловались с опасным в их руках.
Есть такой вариант: ты загружаешь MBR в какую-то область памяти, а этот MBR когда запускается, думает что эта самая область памяти свободна и записывает что-то в нее, таким образом затирая сам себя.
Можно успешно посмотреть код этого лодыря и посмотреть что и куда он пишет. И использовать доступную область памяти для загрузки MBR. По идее, цель первого лодыря - загрузка второго лодыря, для которого уже нет ограничений, и который уже может полноценно перевести процессор в 32-битный режим, загрузить ядро и т.д. Поэтому не исключено что первый лодырь загружает второй сразу же после себя, то есть в твоем случае - вместо себя.
весомо и по делу, herfleisch! так и делают кей-гены, раскодируя себя в разрешённую область памяти - stack, записывая себя в область памяти .code, и запускаясь из неё. сложно, но пусть DooD проведёт два дня за анализом такого кода. комп не поломается и данные не сотрутся.
altblitz, причем тут кей-гены? кей-ген программа генерирующая последовательности по заданному алгоритму. То что ты описал "раскодируя себя в разрешённую область памяти", похоже на алгоритм работы упаковщика. Какая нафиг область памяти .code? BIOS считывает первый сектор диска и передает управление на него, в твоем распоряжении лишь прерывания BIOS и команды процессора. Есть разделение на сегменты и да существует кодовый сегмент (CS), но это никак не область памяти (P.S: может я не так тебя понял). Для справки скажу, что в системе windows при создании процесса ему выделяется виртуальная память, которая СИСТЕМОЙ разбивается на разделы, далее система разбирает PE заголовок исполняемого файла и загружает программу в соответствии с таблицей секций (которая описана в PE заголовке). Соответственно в секции кода и расположен код программы, о котором как я полагаю и рассуждает altblitz. Секция более емкое понятие на самом деле это просто блок данных с различными атрибутами, в секции может быть как код так и данные да и вообще все что угодно. Ссылки по теме: http://www.insidepro.com/kk/065/065r.shtml http://www.wasm.ru/article.php?article=1002001 http://wm-help.net/books-online/book/59464/59464-6.html
короче пока я пришел к тому что выводится такое: could not open drive multi(0)disk(0)rdisk(0)partition(1) значит по идее что то грузится,решил сделать так: запишу код в boot дискеты и попробую загрузить mbr ведны на реальном железе.потом отпишу что как.
толково и технично изложил, Gar|k, понял тебя. из своего личного опыта - подтверждаю, работа с MBR требует знания команд процессора и прерываний на низком уровне. >> записал boot сектор на вм программа записала. и далее - не смогла переписать boot сектор. ограничения ВМ.