Это можно сделать (через ptrace()
действительно; gdb
можно сделать это), но не без особых затруднений, поскольку для вызова функции в другом процессе вам, в основном, нужнонастроить свои регистры, стек и т. д. для выполнения, а затем продолжить процесс, который будет выполнять функцию.Одна из известных мне программ, у которых может быть полезный источник / методология, на которые вы могли бы взглянуть, - injectso .Если вы посмотрите на injectso, посмотрите на inject_code()
функции.
Кроме того, соглашения о вызовах различаются в зависимости от платформы, поэтому вам придется заново перенастроить код для каждой архитектуры / ОС и т. Д.