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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2011, 11:01   #1
UnSpoken
 
Регистрация: 19.09.2008
Сообщений: 4
По умолчанию Как запустить процедуру в исполняемом файле?

Добрый день!
Есть программа, которую я написал достаточно давно. Ее исходники безвозвратно утеряны. Сейчас мне нужно написать дополнение к ней. Это другая программа, которая меняет данные в памяти и запускает процедуру. Эта процедура изменяет несколько компонентов на форме и т.п.
С изменением данных проблем нет. Вопрос, как запустить процедуру, которая уже существует в программе? (ее адрес и код вытащил дизассемблером).
Другими словами, нужно организовать что-то вроде прерывания, которое бы запускало только одну процедуру, а потом продолжало выполнение программы с нужного места.

К сожалению, с ассемлером практически не работал, поэтому буду рад исходникам и подробным рекомендациям. Пишу на Delphi.

Большое спасибо за помощь!
UnSpoken вне форума Ответить с цитированием
Старый 31.01.2011, 12:07   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Собрать эту дизассемблированную процедуру в отдельную dll, а из основной программы вызывать функцию после подключения этой dll. Dll будет находиться в адресном пространстве основной программы, так что никаких проблем быть не должно.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 31.01.2011, 13:28   #3
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Цитата:
Сообщение от UnSpoken Посмотреть сообщение
Добрый день!
которая меняет данные в памяти и запускает процедуру.
зачем что то дизассемблировать и пересобирать?
CreateRemoteThread, тем более если адрес вам известен
суть такова
после смены нужных вам данных(вы ведь уже открыли процесс на запись и прочие бесчинства? ), выделите память в препарируемой виртуальной памяти VirtualAllocEx, запишите туда шеллкодес вида:
Код:
push param1
push param2
push paramN      ;параметры в стек
call ProcAddress  ; адрес той самой процедуры, которая сделает красиво
ret
и вызовите его с помощью CreateRemoteThread по адресу, который вернет VirtualAllocEx
(ежели у процедуры нет параметров, то соответственно их инициализация не нужна, параметры также могут передаваться в ригистрах, вообщем смотреть надо)
вот и все дела
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 01.02.2011, 23:19   #4
UnSpoken
 
Регистрация: 19.09.2008
Сообщений: 4
По умолчанию

Большое спасибо за ответы!
Попробую разобраться =) Вроде бы звучит несложно, посмотрю, что на деле =)
UnSpoken вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В каком событии ФОРМЫ лучше запустить процедуру tarakan1983 Общие вопросы Delphi 7 16.09.2010 23:16
Напишите процедуру SeekFun(f), которая находит в файле, содержащем текст программы на Паскале, идентифика polarity Помощь студентам 0 05.06.2010 18:57
ресурсы в исполняемом файле yellow87 Общие вопросы Delphi 1 25.02.2010 08:42
Как запустить приложение делфи в фоновом режиме(как процесс)? Diakon Общие вопросы Delphi 4 16.11.2009 13:06
Поиск процедуры в исполняемом файле. SoundMan Общие вопросы Delphi 8 19.03.2009 15:38