в C ++, я могу легко создать указатель на функцию, взяв адрес функции-члена. Однако возможно ли изменить адрес этой локальной функции?
т.е. скажем, у меня есть funcA () и funcB () в одном классе, определенные по-разному. Я пытаюсь изменить адрес funcA () на адрес funcB (), чтобы во время выполнения вызов funcA () фактически приводил к вызову funcB (). Я знаю, это ужасно, но мне нужно это сделать, спасибо!
EDIT ----------
Справочная информация о том, что я пытаюсь сделать:
Я надеюсь реализовать модульные тесты для существующей кодовой базы, некоторые методы базового класса, от которых наследуются все мои модули, не являются виртуальными. Мне не разрешено редактировать любой производственный код. Я могу возиться с процессом сборки и заменить в базовом классе соответствующие методы, установленные на виртуальные, но я подумал, что лучше использовать такой хак (который я считал возможным).
Кроме того, меня интересует тема из технического любопытства, так как в процессе попыток взломать эту проблему я довольно много узнаю о том, как такие вещи, как генерация кода и поиск функций, работают под капюшон, который у меня не было возможности выучить в школе, только что закончив 2-й курс университета. Я не уверен, что мне когда-нибудь будут преподавать такие вещи в школе, потому что я учусь на компьютере, а не на CS.
Вернуться к теме
Методы funcA () и funcB () действительно имеют одинаковую сигнатуру, поэтому проблема в том, что я могу получить только адрес функции, используя оператор &? Буду ли я прав, говоря, что я не могу изменить адрес функции или заменить содержимое по этому адресу, не повреждая части памяти? Будет ли DLL-инъекция хорошим подходом для такой ситуации, если функции экспортируются в dll?