Это зависит от того, какова ваша настоящая цель.Вы не можете сделать это, если вы ожидаете, что библиотеки DLL могут быть вредоносными (то есть, если вы ожидаете, что они попытаются обмануть вас ).Но если это просто для отладки или записи в журнал или чего-то относительно безвредного, вы можете посмотреть на стек и получить адрес, который инструкция ret
будет использовать для возврата к вызывающей стороне, перечислить через загруженные библиотеки DLL и проверить, какая из нихадрес находится внутри.
Чтобы получить «обратный адрес», вы можете использовать _ReturnAddress встроенный в Visual C ++, а затем вы можете использовать функцию GetModuleHandleEx ,передав GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
, чтобы получить указатель на DLL, внутри которой находится адрес.
Но я должен повторить: вы не можете основывать решения по безопасности на результатах этого теста .Вредоносному коду очень легко подделать и «обмануть» вашу программу, думая, что это «доверенная» или «безопасная» DLL.Как я уже сказал, если это просто для отладки или ведения журнала или чего-то еще, тогда продолжайте.
Кроме того, это, очевидно, только скажет вам DLL, внутри которой находится вызывающий немедленный вызывающий.Вы не можете сделать это, если у вас 5 уровней или что-то в этом роде ...