Я успешно зацепил приложение жертвы с dll-инъекцией.
Теперь мне нужно вызвать неэкспортированную одноэлементную функцию процесса жертвы.
Возможно ли это, как бы я поступил?
Хотя у меня есть объектные файлы и т. Д. Процесса жертвы, я не могу перестроить / развернуть новые версии, поэтому я не могу просто создать функцию со связью экспорта.
Я пробовал код в процессе подключения:
#include "VictimSingleton.h"
//...
void SomeFuncInHook()
{
VictimSingleton *vs = VictimSingleton::Get();
vs->DoThing();
}
внутренне Get () реализован так:
VictimSingleton* VictimSingleton::Get()
{
static VictimSingleton singleton;
return &singleton;
}
Ожидаемый результат: VictimSingleton :: Get () возвращает тот же адрес при вызове из моего хука или процесса моей жертвы.
Фактический результат: Указатель, возвращаемый функцией Get, хотя и действителен, относится к другому VictimSingleton, чем тот, который использовался процессом жертвы.
Полагаю, это потому, что это две отдельные единицы перевода, поэтому при вызове из моего процесса ловушки создается другая версия синглтона.