//просьба удалить тема клон под названием "sad" Всем привет. Столкнулся с проблемой, есть длл которая попадает в процесс, как можно из длл узнать свое имя?имеется ввиду не имя и путь процесса в котором она находится, а именно имя длл в которой выполняется код. Думал с помощью peb сделать так: Код: while ( lpListCurrent != lpListBegin ) { Module = CONTAINING_RECORD( lpListCurrent, LDR_DATA_TABLE_ENTRY, InMemoryOrderModuleList ); if ( pGetModuleHandleW( Module->BaseDllName.Buffer ) == pGetModuleHandleW( NULL ) ) { ..... пока еще не пробовал, так как нет возможности, может есть другие пути?
CHAR szModuleFileName[MAX_PATH]; GetModuleFileName(GetMyBase(),szModuleFileName,sizeof(szModuleFileName));
barton очень интерессно )) щас добрался все попробовал, все работает отлично, спасибо а мой способ как я и думал не прокатил, потому что вернулось имя процесса :/
Определяем текущий адрес(Call $+5) это в стеке будет первый параметр для LdrFindEntryForAddress(), потом её юзаем. Вернёт указатель на LDR_DATA_TABLE_ENTRY для текущего модуля. Оттуда извлекаем BaseDllName. По мне так лучше вручную найти пропарсив базу лоадера.
MSoft это обычный способ - очень даже простой - именно его и юзают высокоуровневый апи вроде того что ты предложил один раз написал либу для работы со структурами лоадера и забыл это только BaseDllName даст а что если нужно получить FullDllName