В Linux вы ищете переменную среды LD_PRELOAD. Это загрузит ваши библиотеки перед любым запрошенным программой. Если вы предоставите определение функции, совпадающее с определением, загруженным целевой программой, вместо этого будет вызвана ваша версия.
Однако вы не можете точно определить, какие функции вызывает программа. Однако вы можете получить все функции в общей библиотеке и реализовать все из них. Вы на самом деле не перехватываете функции, вы просто переопределяете их.
Такие проекты, как Wine, делают это в некоторых случаях, но не во всех. Они также переписывают некоторые динамические библиотеки. Поэтому, когда Win32 загружает какую-то DLL, она фактически загружает версию Wine, а не собственную версию. По сути, это та же концепция замены функций своими собственными.
Поиск LD_PRELOAD для получения дополнительной информации.