Т. е. нужен нативный аналог этого:
- Код: Выделить всё
System::Reflection::Assembly::GetExecutingAssembly()->Location

System::Reflection::Assembly::GetExecutingAssembly()->Location
Qwertiy писал(а):Именно имя файла, не assembly name.

Хакер писал(а):Получить имя файла легко — GetModuleName.

Qwertiy писал(а):А где хендл модуля взять?

Хакер писал(а):DLL-шке при загрузке передаётся её hModule и DLL-шка должна сохранить у себя это значение, если ей оно в дальнейшем потребуется.
Хакер писал(а):Имя какой из них нужно получить?

Qwertiy писал(а):Я думал, что выполняющийся код "знает", из какой он взят...

Хакер писал(а):То есть ты считал это врожденным свойством x86-машинного кода?


Хакер писал(а):А что именно она должна делать?

Qwertiy писал(а):Определять хендл dll'ки, в которой находится та функция, из которой она вызвана

Хакер писал(а):Та = функция, а она = кто?

Qwertiy писал(а):Ты издеваешься что ли
Qwertiy писал(а):Я же даже пример показал того, о чём думал. Только хендл вместо сборки.

Хакер писал(а):какая связь между этой функцией и этим модулем присутствует

Хакер писал(а):а она = кто?

VBTerminator писал(а):Как я понял, когда выполнение передаётся в какую-то функцию его библиотеки, этой функции надо узнать имя файла, в котором она была объявлена.

Qwertiy писал(а):Между вызывающей функцией и модулем - она в нём находится.
Qwertiy писал(а):Возможное решение - использование адреса возврата из стека.

Хакер писал(а):Вот видишь, теперь уже всё стало ясно (не на уровне догадок, а на уровне изложенного факта).
Хакер писал(а):То она во-первых насколько я помню есть.
Хакер писал(а):Для ситуации, когда код есть, а модуля нет, система должна быть спроектирована так, что в такой ситуации и получить имя/хендл модуля нельзя. Система спроектированна так.

Qwertiy писал(а):А что из этого было не ясно раньше?
Qwertiy писал(а):Присваивание выполнено не будет, поэтому в переменной будет лежать 0. Что тут хорошего?

Хакер писал(а):Какой-то совершенно не состоятельный довод. Про любую программу можно сказать: а что если какого-то присваивания в ней вдруг не состоится. Ой-ой, тогда всё пойдёт не так, как должно.
Хакер писал(а):сли какой-то код хочет получить имя модуля, значит он должен знать хендл модуля. И хендл модуля он должен получить от системы тогда, когда она загружает модуль. В противном случае, может быть код вообще живёт НЕ в модуле. Для ситуации, когда код есть, а модуля нет, система должна быть спроектирована так, что в такой ситуации и получить имя/хендл модуля нельзя. Система спроектированна так. Блестящее решение.

Qwertiy писал(а):Если код не в модуле, то DllMain не вызывается, хендл модуля не присваивается и остаётся 0. Или я неправильно представляю эту ситуацию?

Хакер писал(а):Если код не в модуле, то DllMain не существует, хендл не передаётся, присваивания нет, и самой переменной нет. Как и бесконечного множества других гипотетических сущностей, которых в мире не существует. В чём смысл о них думать, коли они не существуют?

Qwertiy писал(а):возможна: сторонняя программа загружает образ dll'ки в память, сам файл на диске не существует
Qwertiy писал(а):Если нет, то я не понимаю, как тот факт, что модуль может не существовать, связан со всем остальным в этой теме.

Хакер писал(а):Qwertiy писал(а):возможна: сторонняя программа загружает образ dll'ки в память, сам файл на диске не существует
Такая ситуация невозможна. Нельзя спроецировать в файл образ, которого нет на диске.
Хакер писал(а):Я тоже не понимаю. Ты спросил, почему они сделали так, а не иначе. Я ответил: то, как они сделали — пример хорошей инженерии, а то, как ты предлагаешь — пример плохой.

Qwertiy писал(а):В смысле в память?

Qwertiy писал(а):Если код не в модуле, то DllMain не существует, хендл не передаётся

VBTerminator писал(а):функции, ожидающие на входе хендл DLL?

Хакер писал(а):функции, ожидающие хендл DLL

Вернуться в Windows-программирование
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4