Перехват вызовов из программы во время выполнения и сопоставление их с другими вызовами - PullRequest
0 голосов
/ 16 декабря 2010

Программа обычно зависит от нескольких библиотек, а иногда может зависеть и от других программ.Я смотрю на такие проекты, как Wine, и думаю, как они выясняют, какие вызовы делает программа?

В среде Linux, какие подходы используются, чтобы узнать, какие вызовы выполняет исполняемый файл во время выполнения, чтобы пойматьи сопоставить их с другими вызовами?

Любые фрагменты кода или ссылки на ресурсы для дополнительного чтения очень приветствуются:)

1 Ответ

1 голос
/ 17 декабря 2010

В Linux вы ищете переменную среды LD_PRELOAD. Это загрузит ваши библиотеки перед любым запрошенным программой. Если вы предоставите определение функции, совпадающее с определением, загруженным целевой программой, вместо этого будет вызвана ваша версия.

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

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

Поиск LD_PRELOAD для получения дополнительной информации.

...