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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2011, 18:18   #1
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию Запись загрузчика на флешку. В первых 512 байт (бут сектор).

Ребята помогите с записью загрузчика на флешку!
как его запихнуть в первые 509 байт?
и как в 510, 511 байт пихнуть 55aa, соответственно.

______________
буду признателен если кто опишет примерный алгоритм проги на асме, и даст подсказки как такое чудо скодить..
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 17.09.2011, 00:46   #2
Debris
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 32
По умолчанию

Ставишь програму WinHEx, 010 Editor или другой хекс редактор способный открывать диски, открываешь флешку в программе как устройство и руками исправляешь цифры в первых 512 байтах.
Debris вне форума Ответить с цитированием
Старый 17.09.2011, 18:07   #3
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Скажите, пожалуйста, то есть если изменить определёные байты в на флэшке, то можно с неё запустить программу, не взирая на то что на Windows 7 по умолчанию отключён автозапуск через autorun.inf?
Если да, то может, кто-нибудь поделится ссылкой на более подробную информацию по заданному вопросу?
Dimarik вне форума Ответить с цитированием
Старый 17.09.2011, 21:31   #4
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Нет, имеется ввиду загрузка из БИОС при старте компьютера.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 17.09.2011, 23:24   #5
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Debris, спасибо большое)

меня интересует как самому скодить такое чудо, которое мне бы записывало на флешку, в определенные биты памяти..
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 18.09.2011, 09:41   #6
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

пример на фасм:
Код:
org 07C00h

USE16
main:
cli

lgdt	[cs:GDTR]		; Загрузка адреса глобальной таблицы дескрипторов

mov	eax, cr0		 ; Переключение в защищенный режим
or	al,1
mov	cr0,eax

jmp CODE_SELECTOR:pm_start

NULL_SELECTOR = 0				; Нулевой селектор
CODE_SELECTOR = 1 shl 3 		; Селектор кода
DATA_SELECTOR = 2 shl 3 		; Селектор данных
VIDEO_SELECTOR = 3 shl 3		; Селектор буфера видеопамяти

GDTR:					; Global Descriptors Table Register
  dw 4*8-1				; Размер GDT
  dq GDT				; Смещение GDT
GDT:
; нулевой дескриптор (обязательно должен присутствовать в GDT!)
NULL_descr		db	8 dup (0)
; дескриптор 32-разрядного сегмента кода:   база = 00000000h, размер = FFFFFFFFh
CODE_descr		db	0FFh, 0FFh, 00h, 00h, 00h, 10011010b, 11001111b , 00h
; дескриптор 32-разрядного сегмента данных: база = 00000000h, размер = FFFFFFFFh
DATA_descr		db	0FFh, 0FFh, 00h, 00h, 00h, 10010010b, 11001111b , 00h
; дескриптор сегмента видеопамяти:          база = 000B8000h, размер = 0000FFFFh
VIDEO_descr		db	0FFh, 0FFh, 00h, 80h, 0Bh, 10010010b, 01000000b , 00h

;Этот код исполняется в защищенном режиме
;=======================================================;
USE32

pm_start:

mov AX, VIDEO_SELECTOR		; селектор на третий дескриптор (VIDEO_descr)
mov ES, AX					; а этого в ES
mov AX, DATA_SELECTOR
mov DS, AX

;Счетчик символов для вывода на экран
mov di, 0

call print_date
call read_and_set_date
call print_date

exit_:
; завешиваем компьютер
hlt


;Печать значения часа и минут
print_date:
; "hour:"
mov bx, str_hour
call print_string

; Значение часа
mov al, 04H
out 70H, al	   ;выбрать адрес CMOS 04H
jmp $+2 	  ;требуется небольшая задержка
in al, 71H	  ;теперь в AL искомое значение
call bcd_to_dec
mov cx, ax
call print_dec

; Новая строка
call print_new_line

; "min:"
mov bx, str_min
call print_string

; Значение минут
mov al, 02H
out 70H, al	   ;выбрать адрес CMOS 02H
jmp $+2 	  ;требуется небольшая задержка
in al, 71H	  ;теперь в AL искомое значение
call bcd_to_dec
mov cx, ax
mov ah, 0Eh
call print_dec

; Новая строка
call print_new_line

ret;

;Преобразование BCD-кода в DEC
bcd_to_dec:
;перенос старшей цифры в ah
mov ah, al
shr ah, 4
and al, 0Fh
;команда принимает в ah старшую цифру, в al - младшую
add ax,3030h ;преобразование в ASCII
ret

;Преобразование HEX в BCD-код
hex_to_bcd:
mov ah, 0
;команда помещает старшую цифру в ah
aam
;объединение ah и al
shl ah, 4
or al, ah
ret

;процедура вывода 2-х значного десятичного числа на экран
;Число передается в cх
print_dec:
;старшая цифра
mov al, ch
call print_char
;младшая цифра
mov al, cl
call print_char

ret

;вывод на экран строки, оканчивающейся нулем
;адрес сроки передается в ds:bx
;адрес видеопамяти передается в es:di
print_string:

mov ah, 0
; вывод текущего знака
.char:
mov al,[bx]
inc bx

;окончание строки на нулевом символе
test al,al
jz .ret

;Вывод символа
call print_char

jmp .char
.ret:
ret

; Перевод строки
; Для этого указатель di устанавливается на следующее занчение, кратное 160
; размер экрана 80х25, по 2 байта на символ
;новое значение высчитыватся по формуле: di = 160 * ( ( di / 160 ) + 1 )
print_new_line:
; di / 160
mov ax, di
mov bl, 160
div bl
; ( di / 160 ) + 1
inc al
; 160 * ( ( di / 160 ) + 1 )
mul bl
mov di, ax
ret;

; Вывод одного символа на экран
print_char:
;цвет - белый по черному
mov ah, 0Fh
;вывод
mov [es:di], ax
;смещение в следующую позицию
add di, 2
ret

; Чтение из консоли даты и установка в CMOS
read_and_set_date:

; "hour:"
mov bx, str_hour
call print_string

; Значение часа
call read_six_bits
mov al, 04H
out 70H, al	   ;выбрать адрес CMOS 04H
mov al, bl
call hex_to_bcd
out 71H, al	   ;отправка нового значения в порт

; Перенос строки
call print_new_line

; "min:"
mov bx, str_min
call print_string

; Значение дня
call read_six_bits
mov al, 02H
out 70H, al	   ;выбрать адрес CMOS 02H
mov al, bl
call hex_to_bcd
out 71H, al	   ;отправка нового значения в порт

; Перенос строки
call print_new_line

ret

;считывание до 6-ти двоичных цифр
;закончить ввод можно клавишей enter
;результат в bl
read_six_bits:
;результат
mov bl, 0
;счетчик цифр
mov cx, 6

;операция считывания
;считываем из порта 64 состояние
;при установке младшего бита в 1 произошло нажатиие
.wait:
in al, 64h
test al, 1h
jz .wait

;scan-код нажатия получаем из порта 60
in al, 60h

cmp al, 1ch	;Скан-код enter?
je .fin		;тогда закончить ввод
cmp al, 02	;Скан-код единицы?
je .one		;тогда заносим в al 1
cmp al, 0bh	;Скан-код ноля?
je .zero        ;тогда заносим в al 0
jmp .wait
.one: mov al,1	;заносим в al 1
jmp .nxt
.zero: mov al,0	;заносим в al 0
;учитываем считанное значение в результат
.nxt: shl bl, 1
or bl, al

; код функции вывода на экран
add al, '0'
call print_char

;переходим к следующей цифре
dec cx
jnz .wait

.fin:
ret

; СТРОКИ
str_hour db 'HOUR:',0
str_min db 'MIN:',0

; эта директива заставляет компилятор заполнить оставшееся (до 512-и байт) место нулями
times 510-($-main) db 0
; а эти два байта нужны чтобы биос определил что это действительно
; бут сектор
dw 0xAA55
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 18.09.2011, 12:14   #7
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

alexcoder, сенкс!
спасибо за потраченное время на меня)
я и подумать не мог что код кинут, думал так совету дадут..

буду разбирать код и переводить его на TASM..
Спеши медленно.
asmars вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в первые 512байт(бут сектор) флешки. asmars C++ Builder 5 11.09.2011 18:31
Перезапись первых байт Tetr1s Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 03.08.2011 02:20
CreateFile прочитать бут-сектор RoS Win Api 6 06.07.2010 09:36
Помогите определить макс кол цветов картинки 32x32 пикс объёмом 512 байт www_2008 Паскаль, Turbo Pascal, PascalABC.NET 4 13.05.2008 20:25