Я пишу кусок кода, где у меня есть указатель на функцию, которая вызывается.То, что я хотел бы сделать, это вставить в этот вызов функции что-то сделать, а затем вызвать другой вызов функции с теми же аргументами.Интересно, есть ли какой-нибудь способ сделать это без необходимости писать ассемблер для каждой целевой архитектуры.Возможно, есть какие-то хитрости GCC?
В качестве примера я вызываю указатель на мою функцию, и он вызывает
foo (/*arguments*/) {
do_something...
bar(/*same arguments*/);
}
В сборке это довольно просто.По крайней мере, в x86 я просто проверяю, что мой указатель стека сбрасывается в начало кадра стека и переходит на панель функций (не вызывается).
РЕДАКТИРОВАТЬ: Возможно, пример не понятен.Пользователь ожидает вызова функциональной панели, но вместо этого я перенаправил ее на функцию foo (я не знаю, что принимает панель аргументов).Я хочу сделать что-то в foo перед вызовом bar с теми же аргументами, которые были переданы.Таким образом, все, что я делаю в foo, прозрачно для пользователя, который думает, что он просто вызвал bar.