Консультация № 168373
27.05.2009, 11:00
0.00 руб.
0 20 1
Добрый день! Подскажите, пожалуйста, как в отладчике AFDPRO можно увидеть MBR. У меня никак не получается. Я обнулил все сегментные регистры, кроме SS, дал смещение 0000h, но там что-то совсем другое. По адресу 01BEh нет 80h - признака активности раздела. Даже по адресу 01FE - 01FF нет сигнатуры 55h AAh!!! Понятно, что не там смотрю. Но тогда, где нужно смотреть? И почему по адресу 0000h:0000h начинается не MBR?
Заранее спасибо всем откликнувшимся.

Обсуждение

давно
Старший Модератор
31795
6196
27.05.2009, 11:51
общий
это ответ
Здравствуйте, Masada.

Вы смотрите физическую память, MBR там никогда не было, там расположена таблица прерываний.
Чтобы посмотреть MBR - Вам нужно её загрузить в память с помощью команды rd 0,a,0,0,1,1
rd - команда читать диск
0 - адрес куда читать
a - имя дисковода
0 - номер головки
0 - номер дорожки
1 - номер сектора
1 - количество секторов
см. рисунок
Я эксперементировал с загрузочной дискетой MS-DOS 6.22, WinXP к MBR жесткого диска не пускает.
Удачи!
5
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
27.05.2009, 20:39
общий
Спасибо за эту информацию. Пытался скомпилировать файл всего с одной командой "rd 0,c,0,0,1,1", пишет, что ошибка " error A2008: syntax error : rd". Далее запустил отладчик AFDPRO без программы и там прописал: rd 0,c,0,0,1,1 Под командой красным шрифтом было написано: Disk(ette) not ready.
"0 - адрес куда читать" - не очень понятно. 1. "Адрес" неясно, в чём задавать: сегмент/смещение или сектор, головка, цилиндр? 2. Как понять, "куда читать". По-моему, если "Куда", тогда записывать придётся, а это не одно и то же, что читать. 3. Почему в отладчике пишется "head,track,sector", а не Cylinder/Head/Sector. Что тут цилиндром будет, какое английское слово: head или track, а то так много разночтений этих 2 слов, всякий поступает с переводом по своему усмотрению.
А через int 13h нельзя разве прочитать или переписать MBR, или родная ОС не позволит?
давно
Старший Модератор
31795
6196
27.05.2009, 21:04
общий
0 - адрес куда читать это смещение, а сегмент указывается в DS.
Повторю:
Я эксперементировал с загрузочной дискетой MS-DOS 6.22, WinXP к MBR жесткого диска не пускает. Добавлю у меня ещё стоит McAfee, возможно это его проделки. Могу выслать программку, которая запишет на дискету квази Boot-сектор.
"head,track,sector"
track = Cylinder
Сама команда делится на несколько разделов.
rd 0[u]куда копировать[/u],c,0,0,1[u]откуда[/u],1[u]количество секторов[/u]

Читалка MBR:
Код:
MASM;IDEAL or MASM
MODEL small
stack 50
.186
DATASEG
flhndl dw ?
fname db 'mbr_dump.com',0
buff db 512 dup (?)
CODESEG
start: mov ax,@DATA
mov ds,ax
mov es,ax
;
mov ah,3ch
xor cx,cx
mov dx,offset fname
int 21h
mov flhndl,ax

;
mov ax,0202h
mov bx,offset buff
mov cx,01
mov dx,80h
int 13h
jc exit
;
mov ah,40h
mov bx,flhndl
mov cx,512
mov dx,offset buff
int 21h
;
exit: mov ah,3eh
mov bx,flhndl
int 21h
;
mov ah,4ch
int 21h
;
lodsb
mov al,ds:[si]
inc si
stosb
mov es:[di],al
inc di
end start

Она прекрасно работает на w9x, но нехочет работать с HDD в winXP, думаю это система.
Выложил дамп(512 байт), правда помоему это w9x. Завтра попробую обойти защиту системы.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
27.05.2009, 21:23
общий
идея такая:
пишется загрузчик MBR FDD, в нем считывается в память MBR HDD, после этого этот код записывается вместо MBR FDD, ну а прочитать потом MBR FDD с дискеты Вы у же знаете как.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
28.05.2009, 11:11
общий
Такая жалость! Вы мне ещё вчера ответили, а мне до сих пор ещё не пришло на почту сообщение об этом!
"WinXP к MBR жесткого диска не пускает" - а к другим секторам пускает? Я обнулил DS, написал rd 8400,c,0,1,3,1, где 8400 - смещение 65 сектора в LBA, это глянул в дисковом редакторе. Компилятор сообщил об ошибке: Illegal instruction. Я менял 8400 и на 0000, менял DS на 0010h и т.д. - всё та же ошибка. Хотя бы какой-нибудь пример прочтения любого сектора с помощью RD, в инете объясняют RD - как Remove Directory, а не Read Disk<ette>, как у меня.
"Выложил дамп(512 байт)" - чем его открывать, Блокнотом не удаётся.
"Могу выслать программку, которая запишет на дискету квази Boot-сектор" - буду только рад. А почему "квази", это как эмуляция?
Начинаю изучать читалку MBR. Спасибо!!!
Неизвестный
28.05.2009, 12:04
общий
Читалка MBR в TASM'е ассемблируется, но не линкуется tlink mbr.obj /t /x пишет: Fatal: Cannot generate COM file : stack segment present. Попробовал tlink mbr.obj /x, получил EXE-файл, при запуске которого создаётся MBR_DUMP.COM.А т.к. у меня WinXP, то, понятно, что он пустой.
По коду: в нём есть mov ax,0202h прерывания int 13h, т.е. читаем 2 сектора. А почему именно 2, ведь mov bx,offset buff, где buff db 512 dup (?), тогда, наверное, buff db 1024 dup (?), или mov ax,0201h
давно
Старший Модератор
31795
6196
28.05.2009, 12:36
общий
должен быть ЕХЕ-файл.
Да должно быть mov ax,0201h, эт я лоханулся размер буфера изменил, а количество секоров забыл.

чем его открывать HIEW с сайта www.wasm.ru
Если при запуске он не увидит распакованный файл в свойствах файла снимите аттрибуты скрытый.
Прогнал файл другой смотрелкой, получил:
Код:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F Size:0000:0200
0000:0000 33 C0 8E D0 BC 00 7C FB 50 07 50 1F FC BE 1B 7C 3АЋРј·|ыP·P·ьѕ·|
0000:0010 BF 1B 06 50 57 B9 E5 01 F3 A4 CB BE BE 07 B1 04 ї··PW№е·у¤Лѕѕ·±·
0000:0020 38 2C 7C 09 75 15 83 C6 10 E2 F5 CD 18 8B 14 8B 8,|·u·ѓЖ·вхН·‹·‹
0000:0030 EE 83 C6 10 49 74 16 38 2C 74 F6 BE 10 07 4E AC оѓЖ·It·8,tцѕ··N¬
0000:0040 3C 00 74 FA BB 07 00 B4 0E CD 10 EB F2 89 46 25 <·tъ»··ґ·Н·лт‰F%
0000:0050 96 8A 46 04 B4 06 3C 0E 74 11 B4 0B 3C 0C 74 05 –ЉF·ґ·<·t·ґ·<·t·
0000:0060 3A C4 75 2B 40 C6 46 25 06 75 24 BB AA 55 50 B4 :Дu+@ЖF%·u$»ЄUPґ
0000:0070 41 CD 13 58 72 16 81 FB 55 AA 75 10 F6 C1 01 74 AН·Xr·ЃыUЄu·цБ·t
0000:0080 0B 8A E0 88 56 24 C7 06 A1 06 EB 1E 88 66 04 BF ·Ља€V$З·Ў·л·€f·ї
0000:0090 0A 00 B8 01 02 8B DC 33 C9 83 FF 05 7F 03 8B 4E ··ё··‹Ь3Йѓя···‹N
0000:00A0 25 03 4E 02 CD 13 72 29 BE 46 07 81 3E FE 7D 55 %·N·Н·r)ѕF·Ѓ>ю}U
0000:00B0 AA 74 5A 83 EF 05 7F DA 85 F6 75 83 BE 27 07 EB ЄtZѓп··Ъ…цuѓѕ'·л
0000:00C0 8A 98 91 52 99 03 46 08 13 56 0A E8 12 00 5A EB Љ˜‘R™·F··V·и··Zл
0000:00D0 D5 4F 74 E4 33 C0 CD 13 EB B8 00 00 80 18 43 14 ХOtд3АН·лё··Ђ·C·
0000:00E0 56 33 F6 56 56 52 50 06 53 51 BE 10 00 56 8B F4 V3цVVRP·SQѕ··V‹ф
0000:00F0 50 52 B8 00 42 8A 56 24 CD 13 5A 58 8D 64 10 72 PRё·BЉV$Н·ZXЌd·r
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F Size:0000:0200
0000:0100 0A 40 75 01 42 80 C7 02 E2 F7 F8 5E C3 EB 74 49 ·@u·BЂЗ·вчш^ГлtI
0000:0110 6E 76 61 6C 69 64 20 70 61 72 74 69 74 69 6F 6E nvalid partition
0000:0120 20 74 61 62 6C 65 00 45 72 72 6F 72 20 6C 6F 61 table·Error loa
0000:0130 64 69 6E 67 20 6F 70 65 72 61 74 69 6E 67 20 73 ding operating s
0000:0140 79 73 74 65 6D 00 4D 69 73 73 69 6E 67 20 6F 70 ystem·Missing op
0000:0150 65 72 61 74 69 6E 67 20 73 79 73 74 65 6D 00 00 erating system··
0000:0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
0000:0170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
0000:0180 00 00 00 8B FC 1E 57 8B F5 CB 00 00 00 00 00 00 ···‹ь·W‹хЛ······
0000:0190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
0000:01A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
0000:01B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01 ··············Ђ·
0000:01C0 01 00 0C EF FF FE 3F 00 00 00 81 14 2A 01 00 00 ···пяю?···Ѓ·*···
0000:01D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
0000:01E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
0000:01F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA ··············UЄ
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F Size:0000:0200

Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
28.05.2009, 12:59
общий
Если в дампе Вам ничего не понятно, то качаете IDA бесплатную версию и дизассемблируете его.
Код:
seg000:0100 ;
seg000:0100 ; ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН»
seg000:0100 ; є This file is generated by The Interactive Disassembler (IDA) є
seg000:0100 ; є Copyright (c) 2006 by DataRescue sa/nv, <ida@datarescue.com> є
seg000:0100 ; є Licensed to: Freeware version є
seg000:0100 ; ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј
seg000:0100 ;
seg000:0100 ; File Name : D:\\_CAT\\ZCatCopy\\Z_Copy\\_lang\\AsmLib\\MBR_DUMP.COM
seg000:0100 ; Format : MS-DOS COM-file
seg000:0100 ; Base Address: 0h Range: 100h-300h Loaded length: 200h
seg000:0100
seg000:0100 .386
seg000:0100 .model tiny
seg000:0100
seg000:0100 ; ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
seg000:0100
seg000:0100 ; Segment type: Pure code
seg000:0100 seg000 segment byte public 'CODE' use16
seg000:0100 assume cs:seg000
seg000:0100 org 100h
seg000:0100 assume es:nothing, ss:nothing, ds:seg000, fs:nothing, gs:nothing
seg000:0100
seg000:0100 ; ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ S U B R O U T I N E ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
seg000:0100
seg000:0100
seg000:0100 public start
seg000:0100 start proc far
seg000:0100 xor ax, ax
seg000:0102 mov ss, ax
seg000:0104 assume ss:seg000
seg000:0104 mov sp, 7C00h
seg000:0107 sti
seg000:0108 push ax
seg000:0109 pop es
seg000:010A assume es:seg000
seg000:010A push ax
seg000:010B pop ds
seg000:010C cld
seg000:010D mov si, 7C1Bh
seg000:0110 mov di, 61Bh
seg000:0113 push ax
seg000:0114 push di
seg000:0115 mov cx, 1E5h
seg000:0118 rep movsb
seg000:011A retf
seg000:011A start endp ; sp = -4
seg000:011A
seg000:011B ; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
seg000:011B mov si, 7BEh
seg000:011E mov cl, 4
seg000:0120
seg000:0120 loc_120: ; CODE XREF: seg000:0129j
seg000:0120 cmp [si], ch
seg000:0122 jl short loc_12D
seg000:0124 jnz short loc_13B
seg000:0126 add si, 10h
seg000:0129 loop loc_120
seg000:012B int 18h ; TRANSFER TO ROM BASIC
seg000:012B ; causes transfer to ROM-based BASIC (IBM-PC)
seg000:012B ; often reboots a compatible; often has no effect at all
seg000:012D
seg000:012D loc_12D: ; CODE XREF: seg000:0122j
seg000:012D mov dx, [si]
seg000:012F mov bp, si
seg000:0131
seg000:0131 loc_131: ; CODE XREF: seg000:0139j
seg000:0131 add si, 10h
seg000:0134 dec cx
seg000:0135 jz short loc_14D
seg000:0137 cmp [si], ch
seg000:0139 jz short loc_131
seg000:013B
seg000:013B loc_13B: ; CODE XREF: seg000:0124j
seg000:013B mov si, 710h
seg000:013E
seg000:013E loc_13E: ; CODE XREF: seg000:0142j
seg000:013E dec si
seg000:013F
seg000:013F loc_13F: ; CODE XREF: seg000:loc_14Bj
seg000:013F ; seg000:01BAj
seg000:013F lodsb
seg000:0140 cmp al, 0
seg000:0142 jz short loc_13E
seg000:0144 mov bx, 7
seg000:0147 mov ah, 0Eh
seg000:0149 int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
seg000:0149 ; AL = character, BH = display page (alpha modes)
seg000:0149 ; BL = foreground color (graphics modes)
seg000:014B
seg000:014B loc_14B: ; CODE XREF: seg000:01BFj
seg000:014B jmp short loc_13F
seg000:014D ; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
seg000:014D
seg000:014D loc_14D: ; CODE XREF: seg000:0135j
seg000:014D mov [bp+25h], ax
seg000:0150 xchg ax, si
seg000:0151 mov al, [bp+4]
seg000:0154 mov ah, 6
seg000:0156 cmp al, 0Eh
seg000:0158 jz short loc_16B
seg000:015A mov ah, 0Bh
seg000:015C cmp al, 0Ch
seg000:015E jz short loc_165
seg000:0160 cmp al, ah
seg000:0162 jnz short loc_18F
seg000:0164 inc ax
seg000:0165
seg000:0165 loc_165: ; CODE XREF: seg000:015Ej
seg000:0165 mov byte ptr [bp+25h], 6
seg000:0169 jnz short loc_18F
seg000:016B
seg000:016B loc_16B: ; CODE XREF: seg000:0158j
seg000:016B mov bx, 55AAh
seg000:016E push ax
seg000:016F mov ah, 41h
seg000:0171 int 13h ; DISK -
seg000:0173 pop ax
seg000:0174 jb short loc_18C
seg000:0176 cmp bx, 0AA55h
seg000:017A jnz short loc_18C
seg000:017C test cl, 1
seg000:017F jz short loc_18C
seg000:0181 mov ah, al
seg000:0183 mov [bp+24h], dl
seg000:0186 mov word ptr ds:6A1h, 1EEBh
seg000:018C
seg000:018C loc_18C: ; CODE XREF: seg000:0174j
seg000:018C ; seg000:017Aj ...
seg000:018C mov [bp+4], ah
seg000:018F
seg000:018F loc_18F: ; CODE XREF: seg000:0162j
seg000:018F ; seg000:0169j
seg000:018F mov di, 0Ah
seg000:0192
seg000:0192 loc_192: ; CODE XREF: seg000:01B6j
seg000:0192 ; seg000:01D8j
seg000:0192 mov ax, 201h
seg000:0195 mov bx, sp
seg000:0197 xor cx, cx
seg000:0199 cmp di, 5
seg000:019C jg short loc_1A1
seg000:019E mov cx, [bp+25h]
seg000:01A1
seg000:01A1 loc_1A1: ; CODE XREF: seg000:019Cj
seg000:01A1 add cx, [bp+2]
seg000:01A4 int 13h ; DISK - READ SECTORS INTO MEMORY
seg000:01A4 ; AL = number of sectors to read, CH = track, CL = sector
seg000:01A4 ; DH = head, DL = drive, ES:BX -> buffer to fill
seg000:01A4 ; Return: CF set on error, AH = status, AL = number of sectors read
seg000:01A6
seg000:01A6 loc_1A6: ; CODE XREF: seg000:01CFj
seg000:01A6 jb short loc_1D1
seg000:01A8 mov si, 746h
seg000:01AB cmp word ptr ds:7DFEh, 0AA55h
seg000:01B1 jz short loc_20D
seg000:01B3 sub di, 5
seg000:01B6 jg short loc_192
seg000:01B8
seg000:01B8 loc_1B8: ; CODE XREF: seg000:01D2j
seg000:01B8 test si, si
seg000:01BA jnz short loc_13F
seg000:01BC mov si, 727h
seg000:01BF jmp short loc_14B
seg000:01C1 ; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
seg000:01C1 cbw
seg000:01C2 xchg ax, cx
seg000:01C3 push dx
seg000:01C4 cwd
seg000:01C5 add ax, [bp+8]
seg000:01C8 adc dx, [bp+0Ah]
seg000:01CB call sub_1E0
seg000:01CE pop dx
seg000:01CF jmp short loc_1A6
seg000:01D1 ; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
seg000:01D1
seg000:01D1 loc_1D1: ; CODE XREF: seg000:loc_1A6j
seg000:01D1 dec di
seg000:01D2 jz short loc_1B8
seg000:01D4 xor ax, ax
seg000:01D6 int 13h ; DISK - RESET DISK SYSTEM
seg000:01D6 ; DL = drive (if bit 7 is set both hard disks and floppy disks reset)
seg000:01D8 jmp short loc_192
seg000:01D8 ; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
seg000:01DA db 0
seg000:01DB db 0
seg000:01DC db 80h ; Ђ
seg000:01DD db 18h
seg000:01DE db 43h ; C
seg000:01DF db 14h
seg000:01E0
seg000:01E0 ; ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ S U B R O U T I N E ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
seg000:01E0
seg000:01E0
seg000:01E0 sub_1E0 proc near ; CODE XREF: seg000:01CBp
seg000:01E0 push si
seg000:01E1 xor si, si
seg000:01E3 push si
seg000:01E4 push si
seg000:01E5 push dx
seg000:01E6 push ax
seg000:01E7 push es
seg000:01E8 push bx
seg000:01E9 push cx
seg000:01EA mov si, 10h
seg000:01ED push si
seg000:01EE mov si, sp
seg000:01F0 push ax
seg000:01F1 push dx
seg000:01F2 mov ax, 4200h
seg000:01F5 mov dl, [bp+24h]
seg000:01F8 int 13h ; DISK -
seg000:01FA pop dx
seg000:01FB pop ax
seg000:01FC lea sp, [si+10h]
seg000:01FF jb short loc_20B
seg000:0201
seg000:0201 loc_201: ; CODE XREF: sub_1E0+28j
seg000:0201 inc ax
seg000:0202 jnz short loc_205
seg000:0204 inc dx
seg000:0205
seg000:0205 loc_205: ; CODE XREF: sub_1E0+22j
seg000:0205 add bh, 2
seg000:0208 loop loc_201
seg000:020A clc
seg000:020B
seg000:020B loc_20B: ; CODE XREF: sub_1E0+1Fj
seg000:020B pop si
seg000:020C retn
seg000:020C sub_1E0 endp ; sp = -10h
seg000:020C
seg000:020D ; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
seg000:020D
seg000:020D loc_20D: ; CODE XREF: seg000:01B1j
seg000:020D jmp short loc_283
seg000:020D ; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
seg000:020F aInvalidPartiti db 'Invalid partition table',0
seg000:0227 aErrorLoadingOp db 'Error loading operating system',0
seg000:0246 aMissingOperati db 'Missing operating system',0
seg000:025F db 0
seg000:0260 db 0
seg000:0261 db 0
seg000:0262 db 0
seg000:0263 db 0
seg000:0264 db 0
seg000:0265 db 0
seg000:0266 db 0
seg000:0267 db 0
seg000:0268 db 0
seg000:0269 db 0
seg000:026A db 0
seg000:026B db 0
seg000:026C db 0
seg000:026D db 0
seg000:026E db 0
seg000:026F db 0
seg000:0270 db 0
seg000:0271 db 0
seg000:0272 db 0
seg000:0273 db 0
seg000:0274 db 0
seg000:0275 db 0
seg000:0276 db 0
seg000:0277 db 0
seg000:0278 db 0
seg000:0279 db 0
seg000:027A db 0
seg000:027B db 0
seg000:027C db 0
seg000:027D db 0
seg000:027E db 0
seg000:027F db 0
seg000:0280 db 0
seg000:0281 db 0
seg000:0282 db 0
seg000:0283 ; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
seg000:0283
seg000:0283 loc_283: ; CODE XREF: seg000:loc_20Dj
seg000:0283 mov di, sp
seg000:0285 push ds
seg000:0286 push di
seg000:0287 mov si, bp
seg000:0289 retf
seg000:0289 ; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
seg000:028A db 0
seg000:028B db 0
seg000:028C db 0
seg000:028D db 0
seg000:028E db 0
seg000:028F db 0
seg000:0290 db 0
seg000:0291 db 0
seg000:0292 db 0
seg000:0293 db 0
seg000:0294 db 0
seg000:0295 db 0
seg000:0296 db 0
seg000:0297 db 0
seg000:0298 db 0
seg000:0299 db 0
seg000:029A db 0
seg000:029B db 0
seg000:029C db 0
seg000:029D db 0
seg000:029E db 0
seg000:029F db 0
seg000:02A0 db 0
seg000:02A1 db 0
seg000:02A2 db 0
seg000:02A3 db 0
seg000:02A4 db 0
seg000:02A5 db 0
seg000:02A6 db 0
seg000:02A7 db 0
seg000:02A8 db 0
seg000:02A9 db 0
seg000:02AA db 0
seg000:02AB db 0
seg000:02AC db 0
seg000:02AD db 0
seg000:02AE db 0
seg000:02AF db 0
seg000:02B0 db 0
seg000:02B1 db 0
seg000:02B2 db 0
seg000:02B3 db 0
seg000:02B4 db 0
seg000:02B5 db 0
seg000:02B6 db 0
seg000:02B7 db 0
seg000:02B8 db 0
seg000:02B9 db 0
seg000:02BA db 0
seg000:02BB db 0
seg000:02BC db 0
seg000:02BD db 0
seg000:02BE db 80h ; Ђ
seg000:02BF db 1
seg000:02C0 db 1
seg000:02C1 db 0
seg000:02C2 db 0Ch
seg000:02C3 db 0EFh ; п
seg000:02C4 db 0FFh
seg000:02C5 db 0FEh ; ю
seg000:02C6 db 3Fh ; ?
seg000:02C7 db 0
seg000:02C8 db 0
seg000:02C9 db 0
seg000:02CA db 81h ; Ѓ
seg000:02CB db 14h
seg000:02CC db 2Ah ; *
seg000:02CD db 1
seg000:02CE db 0
seg000:02CF db 0
seg000:02D0 db 0
seg000:02D1 db 0
seg000:02D2 db 0
seg000:02D3 db 0
seg000:02D4 db 0
seg000:02D5 db 0
seg000:02D6 db 0
seg000:02D7 db 0
seg000:02D8 db 0
seg000:02D9 db 0
seg000:02DA db 0
seg000:02DB db 0
seg000:02DC db 0
seg000:02DD db 0
seg000:02DE db 0
seg000:02DF db 0
seg000:02E0 db 0
seg000:02E1 db 0
seg000:02E2 db 0
seg000:02E3 db 0
seg000:02E4 db 0
seg000:02E5 db 0
seg000:02E6 db 0
seg000:02E7 db 0
seg000:02E8 db 0
seg000:02E9 db 0
seg000:02EA db 0
seg000:02EB db 0
seg000:02EC db 0
seg000:02ED db 0
seg000:02EE db 0
seg000:02EF db 0
seg000:02F0 db 0
seg000:02F1 db 0
seg000:02F2 db 0
seg000:02F3 db 0
seg000:02F4 db 0
seg000:02F5 db 0
seg000:02F6 db 0
seg000:02F7 db 0
seg000:02F8 db 0
seg000:02F9 db 0
seg000:02FA db 0
seg000:02FB db 0
seg000:02FC db 0
seg000:02FD db 0
seg000:02FE db 55h ; U
seg000:02FF db 0AAh ; Є
seg000:02FF seg000 ends
seg000:02FF
seg000:02FF
seg000:02FF end start


Только учитывайте, что метка start находится в памяти по адресу 0000:7C00h
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
28.05.2009, 15:52
общий
Да, всё получилось, спасибо. У меня не архив скачивался, а файл 316 без указанного в свойствах расширения. Сейчас архив скачал, посмотрел распакованный файл WinHex'ом: у Вас диск с FAT32 и одним разделом, только он не очень большой - 10 Гб.
При запуске IDA выскакивают 2 окна с : "Keyboard layout error: Failed to the scan code of '#' (VrKeyScan failure)", "Keyboard layout error: Failed to the scan code of '~' (VrKeyScan failure)", а при выборе для дизассемблированного нового файла предупреждение "C:\\Program Files\\cfg\\idagui.cfg 178:"OpNumber" ='#' Illegal hotkey" Отсутствие этих двух скан-кодов не очень повлияют на работу IDA? У меня версия IDA Pro Advanced Full 5.2.0.908.
P.S. Я не получаю почему-то на почту сообщения о Ваших ответах, надеюсь, что это временно.
давно
Старший Модератор
31795
6196
28.05.2009, 16:09
общий
Переименуйте в 316.zip
Да это был win95, для запуска системы и личных данных вполне достаточно, т.к. рабочие файлы хранятся на сервере.
И программа тогда работала, а вот когда пересел на ХР, она перестала, только с флопом..
Проверьте стоит ли у Вас в рег.карте(Главная страница портала - Регистрационная карта) галочки:
УВЕДОМЛЕНИЯ
получать вопросы от подписчиков
уведомления о персональных сообщениях на форуме
уведомления о сообщениях на мини-форумах вопросов
уведомления о сообщениях в личной почте
выбранные рассылки портала
новости портала и т.д.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
28.05.2009, 17:27
общий
Да, в рег.карте все галочки стоят. От вас по почте получил только первое сообщение.
А читалку MBR нельзя сделать не через 21, а через 13 прерывание?
Константин Николаевич, пример кода с RD можете дать? Или ссылку, где можно об этом почитать. Я не могу найти, всё только о Remove Directory.
давно
Старший Модератор
31795
6196
28.05.2009, 18:04
общий
А читалку MBR нельзя сделать не через 21, а через 13 прерывание?

Можно, только прерывания 13h работают с сектроами и там никакой файловой системы нет, другими словами Вы читаете в MBR адресс таблицы размещения файлов и размер кластера, вычисляете свободный кластер(сектор, головка, дорожка), помечаете его как занятый, присваиваете ему имя, записываете туда данные MBR и только после этого у Вас появится файл на диске.
Получается очень много неблагодарной возни.
А с 21h всё за Вас делает ОСь.

Можно ещё и по другому, использовать только прерывания BIOS(13h и 10h) для вывода на экран ввиде листинга. А при запуске из командной строки сделать перенаправление вывода в файл.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
28.05.2009, 23:57
общий
Мне здесь, в другом моём вопросе, ответили, что под WinXP int 13h не работает.:(
"читаете в MBR адрес таблицы размещения файлов" - в смысле, читать в Boot-sector'е адрес размещения MFT? На адрес отводится 8 байт, а регистры 2 байтные, правда, дальше 3 байт адрес, в основном, не превышает.
"вычисляете свободный кластер(сектор, головка, дорожка)" - это очень интересно, но я вряд ли смогу из-за неопытности это сделать.
"помечаете его как занятый" - Вы имеете в виду смещение 0016h в заголовке записи MFT? Думаю, что простой заменой 00h - "запись не используется или была удалена" на 01h - "запись используется и описывает каталог" здесь не обойтись. По крайней мере, если судить от обратного, только что удалённый файл только подобной заменой не восстановится, но, наверное, восстановление и занятость - вещи разные.
"присваиваете ему имя" - это прямо в файловой записи MFT в атрибуте $File_Name? У меня недостаточно опыта для такого.
Если у Вас есть подобная программа, выложите, пожалуйста.
давно
Старший Модератор
31795
6196
29.05.2009, 17:01
общий
Masada:
Код:
model	tiny
.code
.186
org 100h
;
begin:
;программа записывающая бут-сектор
;запускаем привод дисковода
xor ax,ax
int 13h
xor ax,ax
int 13h
xor ax,ax
int 13h
;записываем один сектор
mov ax,0301h;запишем 1 сектор
mov bx,offset bootBegin;смещение на бут-сектор;
mov cx,1;
xor dx,dx;
int 13h
ret;выход в дос
;сам бут-сектор
;- - - - -
;
bootBegin:; mov ax,3
; int 10h
;
push cs
push cs
pop ds
pop es
;
mov ax,0201h
mov bx,7E00h
mov cx,01
mov dx,80h
int 13h
;
mov si,7C5Fh
mov cx,szErrorHdd
jc isError
;
xor ax,ax
int 13h
xor ax,ax
int 13h
xor ax,ax
int 13h
;
mov si,7CD7h
mov cx,szErrorFdd
jc isError
;
mov ax,0301h
mov bx,7E00h
mov cx,01
xor dx,dx
int 13h
;
mov si,7C9Bh
mov cx,szFddError
jc isError
;
mov si,7d0fh
mov cx,szNoError
isError: lodsb
mov ah,0Eh
mov bx,3fh
int 10h
loop isError
;
xor ax,ax
int 16h
;
int 19h
;
dbErrorHdd db 'E','r','r','o','r',' '
db 'l','o','a','d',' ','b'
db 'o','o','t',' ','s','e'
db 'c','t','o','r',' ','H'
db 'D','D','r','i','v','e'
szErrorHdd equ $-dbErrorHdd
;
dbFddError db 'E','r','r','o','r',' '
db 's','a','v','e',' ','b'
db 'o','o','t',' ','s','e'
db 'c','t','o','r',' ','F'
db 'D','D','r','i','v','e'
szFddError equ $-dbFddError
;
dbErrorFdd db 'E','r','r','o','r',' '
db 'i','n','i','t','i','a'
db 'l','i','z','a','t','i'
db 'o','n',' ','F','D','D'
db 'r','i','v','e'
szErrorFdd equ $-dbErrorFdd
;
dbNoError db 'P','r','e','s','s',' '
db 'a','n','e',' ','k','e'
db 'e',' ','f','o','r',' '
db 'r','e','b','o','o','t'
db ' ','y','o','u',' ','s'
db 'y','s','t','e','m','!'
szNoError equ $-dbErrorHdd
;
db 277 dup(0)
;
db 7fh,1,0,41h,0bbh,0,7,60h,66h,6ah,0,0e9h,3bh,0ffh,0,0,55h,0aah
end begin


Вот читалка MBR_ХР_HDD. Правда с выводом, какая то проблема пока не разбирался, курсор передвигает, но ничего не видно, но свою задачу выполняет:
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
30.05.2009, 11:28
общий
Спасибо!!!
У Вас эти строки закомментированы? bootBegin: ;mov ax,3 и ; int 10h?
Как сообщение выводится мне не совсем ясно, вижу, что с помощью флага переноса. В каких случаях будет это условие соблюдено в данной программе, в смысле, что именно команда проверяет, чтобы стать 0 или 1.
По метке isError: там команда lodsb, для чего она: команды stosb же нет и регистр es на видеостраницу не настроен, может, потому и нет на экране ничего. Если сообщение об ощибке некритично, то это и не надо.
Последнее, а что делает функция 0Eh прерывания int 10h, я что-то расшифровку не нашёл.
давно
Старший Модератор
31795
6196
30.05.2009, 12:11
общий
Я там пробывал и rep movsb прямая запись в видеобуфер(все нужные регистры настроенны). Пол дня провозился именно с выводом на экран информации, но разбиратся почему у меня нет 3-го режима VGA(в данный момент нет желания).

а что делает функция 0Eh прерывания int 10h, я что-то расшифровку не нашёл.

Насколько я знаю это самое полное описание:Ralf Brown's Interrupt List выбераете прерывание, после этого выбираете функцию и читаете, правда на "аглецком".
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
30.05.2009, 14:03
общий
;
mov si,хххх
mov cx,хххх
jc isError

Любая функция(из тех которые использовались) возврает ошыбку устанавливая флаг переноса. Который и проверяется. По идее должно выводится нужное сообщение:
;Ошибка чтения жесткого диска
dbErrorHdd db 'Error load boot sector HDDrive'
szErrorHdd equ $-dbErrorHdd
;ошибка записи на флопик
dbFddError db 'Error save boot sector FDDrive'
szFddError equ $-dbFddError
;устройство флоп не готово
dbErrorFdd db 'Error initialization FDDrive'
szErrorFdd equ $-dbErrorFdd
;нажмите любую клавишу для перезагрузки
dbNoError db 'Press ane kee for reboot you system!'
szNoError equ $-dbErrorHdd

Особенно интересен момент у удачной записью, на дискете уже записан код MBR-диска, при вставленной дискете загрузка начнется с неё, при этом не важно, какой MBR-диска, там можно написать, что-то вроде вставтье ключевую дискету и нажмите любую клавишу.
Это метод защиты называется "Ключевая дискета", классный, но легко ломается.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
30.05.2009, 14:29
общий
В общем-то, понятно.
Но почему SI будет указывать именно на наш текст, по тем смещениям, которые в программе: SI,7C5Fh; SI,7CD7h и т.д., в отладчике по этим смещениям ничего не видно. Каким образом там может текст появиться? Начало текстового блока в отладчике находится по смещению 0177h.
Насчёт флага переноса, что его менять может.

Неизвестный
30.05.2009, 14:35
общий
Пока писал сообщение, Вы уже ответили про флаг переноса.
давно
Старший Модератор
31795
6196
30.05.2009, 18:28
общий
Бут сектор грузится искючительно по адрессу 0000:7C00, то что у Вас в *.сом файле находится со смещением 100h будет иметь в памяти совершенно другие адреса. Поиграйтесь в математиков, посчитайте адреса с учетом что данный код загружается в память и в этой памяти ему и работать.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа