Получить имя объекта, импортированного из DLL

У меня есть указатель на некоторый объект, который был загружен из DLL с помощью GetProcAddress:

CSomeClass* pSomeClass;
pSomeClass = (CSomeClass*)GetProcAddress(someDLLinstance, "SomeUnknownName");

Я не могу изменить код выше, но мне нужно получить "SomeUnknownName" строка после того, как он вышел из области видимости. Все, что я могу получить, это pSomeClass указатель. Есть ли какой-нибудь удобный способ получить имя импортированного объекта из его указателя? Прямо сейчас я просто сбрасываю все имена экспорта из DLL, затем использую GetProcAddress() на каждом из них получить все указатели на все экспортируемые объекты / функции, а затем сравнить pSomeClass к этим указателям, но это, кажется, очень медленно для решения.

-3

Решение

Если вам действительно нужно это сделать, вы можете использовать функции DbgHelp для выполнения этой работы. В частности, вы бы смотрели на SymFromAddr в этом случае.

Вы начинаете с вызова SymInitializeтогда вы можете позвонить SymFromAddr, Вы даете ему адрес структуры SYMBOL_INFO. Вы вводите адрес и максимальную длину символа, и он возвращает имя.

Когда вы закончите, вы по крайней мере должны позвонить SymCleanup позволить библиотеке диспетчера символов завершить работу, освободить любую память, которую она хранит, и т. д. Предположительно, это произойдет / все произойдет, когда ваш процесс завершится, но чистее будет вызывать его, когда вы закончите.

Если у вас есть отладочная информация, это будет успешно для любого символа. Однако даже без отладочной информации он (по крайней мере обычно) будет успешным для экспортированных символов.

1

Другие решения


По вопросам рекламы [email protected]