Есть адрес виртуальной памяти пользовательского диапазона. Как узнать какой модуль расположен по этому адресу?
Может и не прямой, но успешно применяется: Декрементировать адрес и смотреть пока не 'MZ' или пока каспер поток не прибьет ))) уж больно не шеллкод будет смахивать )))
Так, на заметку........ В 2001 мсдне были сорсы dr Watson , а он по адресу может модуль определять в любой системе.
RamMerLabs Хорошая аббревиатура... кстать а как расшифровуется? У меня когда то был . Могу недели через 3 найти и выслать на мыло
Да никак не расшифровуется, так просто вспомнил "Эйс Вентура" с оригинальной (английской) озвучкой. есть А он сильно объёмный, а то у меня траф ограничен - 100Мб. Потом за каждый метр по 1,5 рубля, а степуха не раньше 15 февраля.
Код (Text): CString GetModName_of_Addr_PID(DWORD pid, DWORD Addr) { // Получить моментальный снимок процесса. HANDLE hthSnapshot = NULL; hthSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid); MODULEENTRY32 me = {sizeof(me)}; Module32First(hthSnapshot,&me); do { if (((DWORD)me.hModule < Addr) && (((DWORD)me.hModule + me.modBaseSize) > Addr)) { CloseHandle(hthSnapshot); return me.szExePath; } } while(Module32Next(hthSnapshot,&me)); CloseHandle(hthSnapshot); return ""; } Так можна с юзер режима. Аналогично через PEB c ядра как писал yuzvir
ну эту ф-ию я и сам сделал (только через PSAPI), но адрес у меня получается указывает на kernel32.dll, ещё разбираюсь.
RamMerLabs <Есть адрес виртуальной памяти пользовательского диапазона. Как узнать какой модуль расположен по этому адресу? > Никогда не думал что там может быть расположена куча или выделеные куски памяти ? тогда ты никак модуль не определишь, единствено проверить адреса куч.
RamMerLabs Ну и в большинстве случаев вижу там именно kernel32 (GetModuleFileName + N или CreateThread + N).