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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2020, 07:48   #1
TheReactiveMouse
Пользователь
 
Регистрация: 02.10.2020
Сообщений: 17
Вопрос Как получить доступ к другому бинарнику?

Есть iso файл, один из бинарников - boot.bin, загрузочный, из него я хочу получить доступ к другому бинарнику без файловой системы по адресу. У boot.bin - 0x7c00, у bin2.bin - 0x7A00.jmp не работает, может есть варианты? (Я новичок и не хочу париться на счёт файловой системы, это сложно ) Использую Nasm в 16-ти битном режиме.

Последний раз редактировалось TheReactiveMouse; 02.12.2020 в 07:50. Причина: Добавление яп
TheReactiveMouse вне форума Ответить с цитированием
Старый 02.12.2020, 08:41   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от TheReactiveMouse Посмотреть сообщение
У boot.bin - 0x7c00, у bin2.bin - 0x7A00.
jmp не работает
jmp должен работать, т.к. сегмент в данном случае один-и-тот.
есть ещё jmp far, но он для межсегментных вызовов, когда к смещению добавляется ещё и адрес сегмента.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 02.12.2020, 08:56   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от TheReactiveMouse Посмотреть сообщение
Я новичок и не хочу париться на счёт файловой системы, это сложно
А напрямую - еще сложнее.
waleri вне форума Ответить с цитированием
Старый 02.12.2020, 14:15   #4
TheReactiveMouse
Пользователь
 
Регистрация: 02.10.2020
Сообщений: 17
По умолчанию

R71MT, Может быть надо jmp 7A00h:0000? И может обьясните на примере?
TheReactiveMouse вне форума Ответить с цитированием
Старый 02.12.2020, 16:12   #5
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от TheReactiveMouse Посмотреть сообщение
Может быть надо jmp 7A00h:0000?
Это и есть "jmp far", т.к. адрес указывается в формате сегмент:смещение
Только если это загрузчик, то будет наоборот - 0000 = сегмент в регистре CS, и 7A00 = смещение в данном сегменте.

Судя по всему, модуль ядра "bin2.bin" ты положил в память 0000:7A00, и хочешь передать на него управление из загрузчика, который находится в том-же сегменте(0000), только по базовому адресу 0000:7С00. Поэтому это считается обычным NEAR переходом (в пределах 64Кб) и простой "jmp" тут должен работать. Есть ещё условные переходы типа JZ/JNB/JNC и т.п - они считаются близкими SHORT и не могут выходить за пределы 128-байт.
Код:
;//-- в загрузчике настраиваем сегм.регистры -------//
xor   ax,ax       ; АХ = 0000
mov   cs,ax       ; CS(сегмент-кода)   = нуль
mov   ds,ax       ; DS(сегмент-данных) = нуль
mov   ss,ax       ; SS(сегмент-стека)  = нуль
mov   sp,0x7c00   ; SP = указатель на стек


;//-- JMP NEAR -------//
; вариант(1)
jmp   0x7a00

; вариант(2)
push  0x7a00 
retn              ; Return-Near

;//-- JMP FAR --------//
;---- нужно предварительно положить в CS номер сегмента DOS
; вариант(1)
jmp   far cs:0x7a00

; вариант(2)
push  cs
push  0x7a00 
retf              ; Return-Far
Если переход не работает, то может получившее управление ядро кривое - нужно смотреть в отладчике.
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 02.12.2020 в 16:14.
R71MT вне форума Ответить с цитированием
Старый 03.12.2020, 08:04   #6
TheReactiveMouse
Пользователь
 
Регистрация: 02.10.2020
Сообщений: 17
По умолчанию

R71MT, Попробовал, не помогло, может дело в том что я делаю .iso через UltraISO?

Последний раз редактировалось TheReactiveMouse; 03.12.2020 в 08:11.
TheReactiveMouse вне форума Ответить с цитированием
Старый 03.12.2020, 10:24   #7
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

вполне возможно...
как-вариант - пробуй чистый бинарник, не пакуя в iso.
с какого носителя вообще грузишся? флоп, флешка, диск?

я когда-то делал себе загрузчик с осью - всё работало с реального флопа.
если нужно могу скинуть исходники.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 03.12.2020, 17:31   #8
Дайк
Новичок
Пользователь
 
Регистрация: 03.12.2020
Сообщений: 12
По умолчанию

Цитата:
Сообщение от TheReactiveMouse Посмотреть сообщение
R71MT, Попробовал, не помогло, может дело в том что я делаю .iso через UltraISO?
Вторые сутки или больше вопрос решаешь, а изложил-бы
конкретно, что и куда и зачем, ответ получил бы уж...

Надоть-как?
Я загружаюсь с LiveCD/USB (или свое Указать),
хочу установить/запустить (Указать), что-то в этом роде...
Дайк вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ из одного документа к другому KemanSR Visual C++ 0 01.05.2015 19:06
Передать управление другому бинарнику EnderChiken Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 22.02.2013 14:46
Как подключиться к другому компьютеру по IP и получить список общих папок calypso Работа с сетью в Delphi 1 02.12.2012 20:00
получить доступ к другому окну champx Win Api 2 04.10.2012 22:41
Делфи. Функция, возвращающая букву системного диска(раздела). Или как ее можно получить по-другому? быдлокодер Помощь студентам 2 08.06.2010 23:26