@KTG

Как получить список всех функций и перехватить их вызов (Delphi)?

Например есть программка калькулятор.
В ней есть 4 действия (функции): сложить, умножить, вычесть, разделить.
Прикручиваем к нему процедуру динамического подключения внешних библиотек.
Компилируем и больше исходный код программы не трогаем.

Теперь пишем библиотеку авторизации со своими формами.
В итоге, хочется, просто подключив в программе калькулятора эту библиотеку, что бы она выводила в своей форме все его события для назначения доступа тому или иному пользователю. И теперь, перед каждым вызовом этого действия, библиотека проверять наличие прав и либо его производит, либо выдает сообщение об ошибке. С учетом что код программы мы не трогаем и нигде в ручную проверки не прописываем.

Ну и собственно сами вопросы:
Как получить список всех действий (функций/процедур) программы куда подключилась библиотека?
Как их отлавливать?
И можно ли при написании программы, как то задавать псевдонимы или описания этим функциям, что бы в списке они появлялись с нормальным названием.

Ну и если подход к задаче не верный, то каким способом можно реализовать задумку?
  • Вопрос задан
  • 342 просмотра
Пригласить эксперта
Ответы на вопрос 3
@kalapanga
Функции из динамической библиотеки могут что-то получать при вызове в качестве параметров и что-то возвращать в виде результата. Но они не могут сами получить доступ к чему-либо в основной программе и непосредственно управлять ей. Так что, сколько угодно выносите процедуру авторизации в библиотеку, но результат авторизации должен обрабатываться основной программой.
Задача Ваша не то чтобы плохо сформулирована, а сама идея кажется слишком вычурной и надуманной. Поэтому трудно что-то предложить.
Ответ написан
Rou1997
@Rou1997
Бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла-бла...
Для конкретного EXE это пишется с помощью отладчика, декомпилятора и дизассемблера, функции затем можно вызвать по адресам в памяти, если надо перехватить вызовы то тоже так только еще и с записью в память есть хорошая вещь Cydia - готовая библиотека для таких "хуков", если она не подходит то можно посмотреть как в ней сделано и сделать аналогично.
Насчет абстрактной программы - гораздо сложнее, но тот же отладчик же работает как-то, можно его исходный код использовать.

И можно ли при написании программы, как то задавать псевдонимы или описания этим функциям, что бы в списке они появлялись с нормальным названием.

Можно конечно, лучше всего для этого писать ее на C# и т.п.

Ну и если подход к задаче не верный, то каким способом можно реализовать задумку?

А черт его знает, вы же задачу не сформулировали, вместо нее бла-бла-бла о каком-то вымышленном калькуляторе.
Ответ написан
opium
@opium
Просто люблю качественно работать
а как вы собрались то свою библиотеку подключить ?
ответив на этот вопрос все остальное вам станет очевидно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы