|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||||||
динамическое выполнение машинного кода04.05.2010, 22:28. Показов 2581. Ответов 11
Метки нет (Все метки)
Есть некий набор ассемблерных команд, переведенный уже в машинный код. Нужно загнать его в память в Heap и выполнить, а затем вернуть управление. Делаю так, но не получается
0
|
||||||
| 04.05.2010, 22:28 | |
|
Ответы с готовыми решениями:
11
таблицу машинного кода и асма
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
| 04.05.2010, 22:59 [ТС] | |
|
Идея в том, чтобы выполнить некие машинные инструкции (в основном там add и mul) размещенные в памяти, то есть нужно грамотно передать на них управление, а затем вернуть управление назад в программу, то есть последней инструкцией должна быть ret или C3 в 16 ричной записи. Помогите найти ошибку
0
|
|
|
69 / 74 / 0
Регистрация: 15.12.2008
Сообщений: 302
|
|
| 04.05.2010, 23:01 | |
|
защищенный режим процессора ихмо, в дос прокатит главное определить альфа смещение данных
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||
| 04.05.2010, 23:15 [ТС] | ||
|
И обойти никак? Перевести? Может создавать длл писать инструкции туда а потом передавать управление?
Добавлено через 2 минуты Я просто должен в свойе проге периодически менять код маленького куска несколько раз за время обного сеанса пользователя. Я понисаю что десь только динамическая компиляция нужна, но я нехочу тягать компилятор с ней. Я написал сам код, который генерит простейшую длл, и теперь можно туда эти коды загонять и потом загружать её заново, но там очень критично к размеру программы, поэтому хотелось бы без dll( Добавлено через 7 минут Добавлено через 3 минуты Раньше метод складывал 2 числа, а теперь я там add eax, ebx на sub eax, ebx заменю? (но конечно в 2 коде, то есть что-то типа 66 01 D8 (Hex) на 66 29 D8 (Hexademical).
0
|
||
|
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
|
|||||||
| 04.05.2010, 23:29 | |||||||
|
Во-первых ошибка в строке call [ebx]. Должно быть без скобок.
Во-вторых там скорее всего установлены аттрибуты на чтение-запись, но не выполнение.
1
|
|||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
||
| 04.05.2010, 23:34 [ТС] | ||
|
0
|
||
|
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
|
||||||
| 04.05.2010, 23:39 | ||||||
|
Ну так, например, работает.
1
|
||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|||||||||||
| 04.05.2010, 23:46 [ТС] | |||||||||||
|
У меня тоже управление оно возвращает. Но вот такое не работает:
0
|
|||||||||||
|
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
|
||||||
| 05.05.2010, 00:02 | ||||||
|
Ну можно и в отладчике поглядеть, что там. У меня нет дельфи, не могу скомпилить, но вот переделывая под такой вариант мой же код.
1
|
||||||
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
| 05.05.2010, 00:20 [ТС] | |
|
Да этот код заработал. Просто у меня весь проект на C++ и его на асм переводить долго( А компилятор что Делфи, что Visual C++ на инструкцию mov [eax], ebx компилит (выполняет) что то вроде mov [es+bx], ebx. Хотя я вроде из таблиц правильно беру Hex коды команд. Как-то еще можно на асме занести значение по адресу, если адрес лежит в eax? Может оно неправильно интерпретирует эту инструкцию(
0
|
|
|
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
|
|
| 05.05.2010, 00:25 | |
|
Я в таких случаях открываю olly вписываю нужную команду и смотрю код. Сейчас она мне ясно написала, что mov [eax],ebx, это 89 18. А со всеми 66 и 67 это и будет mov [es+bx], ebx.
То, что вы смотрите, это вероятно опкоды для реального, а не защищенного режима.
1
|
|
|
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
|
|
| 05.05.2010, 00:38 [ТС] | |
|
Да теперь все правильно. Спасибо) Как раз то, что нужно. Теперь надо сделать генерирование самого массива команд (транслятор) и для fpu оппкоды сверить так как функция эта должна с вещественными числами работать, и все будет ок)
![]() ![]() ![]() Добавлено через 3 минуты Кстати если все так просто, то можно сделать довольно просто транслятор со своего языка программирования, или даже компилятор, не разбираясь долгими ночами с форматом PE - exe. Просто путем "мутации") или "модификации" уже имеющегося exe-файла.
0
|
|
| 05.05.2010, 00:38 | |
|
Помогаю со студенческими работами здесь
12
Определить адрес операнда в DS из машинного кода команды ADD
Динамическое выполнение кода Динамическое выполнение кода
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|