Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2008, 13:47   #1
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию Как изменить partition table без перезагрузки

Вот такой алгоритм:

Грузится код моего MBR. Partition Table в ней отсутствует отсутствует. Я ее восстанавливаю, записываю сектор с MBR и PT на место.

*******

Дальше загружаю boot sector первой partition и передаю управление на него. Он грузит ОС.

---------------------------
Так, вот если вместо ******* сделать перезагрузку, то следующая загрузка пройдет с нормальной PT и дальше все работает.

Если же перезагрузки нет, то загрузка OS не проходит то есть мои изменения сектора с PT игнорируются.

Теперь собственно вопрос. BIOS куда-то грузит копию PT еще до загрузки MBR ?
alexBlack вне форума Ответить с цитированием
Старый 11.02.2008, 18:01   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
Дальше загружаю boot sector первой partition и передаю управление на него. Он грузит ОС.

Если же перезагрузки нет, то загрузка OS не проходит то есть мои изменения сектора с PT игнорируются.
а что за ошибка при загрузке? может просто ты грузишь по неправильному адресу код бут-сектора первого раздела?
rpy3uH вне форума Ответить с цитированием
Старый 11.02.2008, 20:30   #3
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Не, по правильному. Ведь если не менять PT, дальше все загружается.
Ошибка NTLDR not found. boot Sector то я беру сам, т.к. знаю где он находится, а он пытается найти загрузчик, а искать то не где.

Еще раз. Если в моем MBR правильная PT, то он нормально грузит boot sector и загрузка проходит без проблем. А вот если PT в момент чтения MBR неправильная, я правлю ее сам, но boot sector не находит загрузчика. Partition точно становится правильным - если сразу перегрузиться, MBR считается с новой PT и все проходит.

Перечитал. Самому не понятно что наговорил. Может схему ?

2 варианта загрузки

. 1. С нормальной PT
. MBR меняет PT (XOR-ит) и сохраняет сектор
. Ожидание реакции пользователя
. Если здесь перегрузить, перейдем к варианту 2
. Меняем PT обратно, сохраняем сектор
. Чтение boot-сектора
. Передача ему управления
. Загрузка проходит
.

. 2. С измененной PT (поXORено)
.(PT уже изменена)
.Ожидание реакции пользователя
.меняем PT обратно, сохраняем
.Чтение boot-сектора
.Передача ему управления
.NTLDR не найден
.Если здесь перегрузить, перейдем к 1 варианту


код - основные моменты
Код:
newMBR          proc
                ; 00-1B code = original MBR  -------- просто переносим себя по адресу 0600h
                xor     AX, AX
                mov     SS, AX 
                mov     SP, 7C00h
                STI
                PUSH    AX
                POP     ES
                PUSH    AX
                POP     DS
                CLD
                MOV     SI, 7C1Bh
                MOV     DI, 061Bh 
                PUSH    AX
                PUSH    DI         ; ret address 00:061Bh
                MOV     CX, 1E5h   ; count 
                rep     movsb
                retf
start1:         ; address 1Bh 
                XOR     AX, AX     ; garantie different by original MBR code

                ; Если PT еще не изменена, меняем ее и сохраняем на диск
                ; Работает - проверял после каждой загрузки PT меняется как и должна 
	mov     al, 80h   ; 80h - шифровать, если не изменена
             mov     bp, 7C00h ; адрес MBR для записи
	call    crypt

	; password
            ; ожидание действий пользователя
                call    waitPassword

               ; меняем PT еще раз и сохраняем 
                ; encrypt MBR
                mov     al, 56h  ; 56р - расшифровать  
                mov     bp, 7C00h
                call    crypt 

                ; load boot sector 
                MOV     bp, 7C00h+1BEh  ; first partition
                mov     ax, 201h        ; read 1 sector 
                mov     bx, 7C00h       ; address
                mov     cx, DS:[bp+2]   
                mov     dx, [bp]
                int     13h
                jc      @@Error
                ; call
                push    0000
                push    7C00h 
                retn
@@error:
Кажется, дошло. Нужно только проверить. Я копирую зашифрованный сектор по адресу 600h и не расшифровываю его в варианте 2. В варианте 1 копируется незашированный сектор. Если Boot-sector позже используется данные по смещению 600h, то они неправильные. Хотя с другой стороны, я ведь могу скопировать себя в другую область. или нет ?.

Последний раз редактировалось alexBlack; 11.02.2008 в 22:32.
alexBlack вне форума Ответить с цитированием
Старый 12.02.2008, 08:03   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

А нет. Копируется только загрузочный код. Значит что-то другое. Будем искать.
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Table v ASP NET-e ameli ASP.NET 1 08.07.2008 06:22
Table Devikss БД в Delphi 7 29.05.2008 11:52