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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2013, 11:44   #1
EnderChiken
 
Регистрация: 23.12.2012
Сообщений: 8
Плохо Передать управление другому бинарнику

Здравствуйте, заранее извиняюсь за такой может-быть нубский вопрос, в ассемблере я новичок. Проблема: Как с помощью nasm передать управление другому бинарнику? Допустим у нас есть 1.bin и 2.bin, как из 1.bin передать управление 2.bin?
EnderChiken вне форума Ответить с цитированием
Старый 22.02.2013, 13:17   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

смотря что в вашем 2.bin...
насколько я понимаю, либо выделить память, прочитать в эту память 2.bin и передать управление на точку входа, либо воспользоваться функцией ОС: выполнить указанный файл (разумеется, файл должен соответствовать требованиям операционной системы к исполняемым файлам!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.02.2013, 13:20   #3
EnderChiken
 
Регистрация: 23.12.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
смотря что в вашем 2.bin...
насколько я понимаю, либо выделить память, прочитать в эту память 2.bin и передать управление на точку входа, либо воспользоваться функцией ОС: выполнить указанный файл (разумеется, файл должен соответствовать требованиям операционной системы к исполняемым файлам!)
Первый вариант.

Допустим в 2.bin есть следущие строки
Код:
jmphere:
     ;Код
И нам нужно из 1.bin сделать jmp jmphere, как это сделать?
EnderChiken вне форума Ответить с цитированием
Старый 22.02.2013, 13:27   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

стоп. что значит, "Допустим в 2.bin есть следущие строки" ?!
2.bin - это что - ТЕКСТОВЫЙ файл, содержащий исходный текст программы на ассемблере?!

я, исходя из расширения BIN, решил, что это БИНАРНЫЙ файл...
я ошибся?...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.02.2013, 13:39   #5
EnderChiken
 
Регистрация: 23.12.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
стоп. что значит, "Допустим в 2.bin есть следущие строки" ?!
2.bin - это что - ТЕКСТОВЫЙ файл, содержащий исходный текст программы на ассемблере?!

я, исходя из расширения BIN, решил, что это БИНАРНЫЙ файл...
я ошибся?...
Похоже это я ошибся. То есть нельзя делать jmp на определённую часть бинарника? Тогда нужно загрузить его в память.

Последний раз редактировалось EnderChiken; 22.02.2013 в 13:41.
EnderChiken вне форума Ответить с цитированием
Старый 22.02.2013, 13:51   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
То есть нельзя делать jmp на определённую часть бинарника? Тогда нужно загрузить его в память.
ну да, правильно. так и есть.
если это простой бинарник (типа .COM файла), тогда можно загрузить файл в память (прочитать с диска и результат поместить в ОЗУ) и сделать JMP на начало этой памяти (куда грузили).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.02.2013, 14:00   #7
EnderChiken
 
Регистрация: 23.12.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну да, правильно. так и есть.
если это простой бинарник (типа .COM файла), тогда можно загрузить файл в память (прочитать с диска и результат поместить в ОЗУ) и сделать JMP на начало этой памяти (куда грузили).
Это обыкновенный RAW бинарник (nasm 1.asm -f bin -o 1.bin), так вот мне не понятно как загрузить его в память и сделать jmp туда.
EnderChiken вне форума Ответить с цитированием
Старый 22.02.2013, 14:19   #8
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Вопрос лишь в одном - что у вас в данный момент запущено? Если полноценно запущен DOS, то можно выделить область в памяти (функции 48-4a int 21h). Если под windows, то используйте API, а если это один из элементов загрузчика, то процесс выделения памяти должен именно вами и контролироваться. После загружаете туда ваш файл (используя сервисные функции DOS, BIOS или API Windows) и по известному адресу сегмента и смещению (см. ваш бинарник) передаете управление. Например, так:
Код:
jmp far segment:offset
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 22.02.2013, 14:27   #9
EnderChiken
 
Регистрация: 23.12.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Вопрос лишь в одном - что у вас в данный момент запущено? Если полноценно запущен DOS, то можно выделить область в памяти (функции 48-4a int 21h). Если под windows, то используйте API, а если это один из элементов загрузчика, то процесс выделения памяти должен именно вами и контролироваться. После загружаете туда ваш файл (используя сервисные функции DOS, BIOS или API Windows) и по известному адресу сегмента и смещению (см. ваш бинарник) передаете управление. Например, так:
Код:
jmp far segment:offset
А если не запущено ничего? (Пишу свою ОС и мне нужно передать управление ядру) То что тогда делать? Использовать прерывания BIOS? В MikeOS например используется incbin.
EnderChiken вне форума Ответить с цитированием
Старый 22.02.2013, 14:46   #10
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Вам же ответили:
Цитата:
если это один из элементов загрузчика, то процесс выделения памяти должен именно вами и контролироваться. После загружаете туда ваш файл (используя сервисные функции DOS, BIOS или API Windows) и по известному адресу сегмента и смещению (см. ваш бинарник) передаете управление.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как еще по другому илхам Microsoft Office Excel 1 29.01.2013 11:12
Как передать управление из одного объекта в другой? wolf05632 Microsoft Office Word 16 10.04.2011 08:21
При чтении из консоли в одном потоке, не передается управление другому потоку Хохол Общие вопросы по Java, Java SE, Kotlin 3 10.11.2010 18:22
как из макроса передать управление пользователю, а потом опять макросу? Тупой Microsoft Office Excel 5 03.09.2009 23:01
передать данные другому приложению vasya_pupkin Win Api 1 16.02.2007 20:17