· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› базовый адрес модуля в другом процессе

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Июн 14, 2004 06:58:39

DarkK

Мля, действительно есть такой глюк, "ошибка приложения ..." при попытке снять снапшот модулей процесса, но имеет место только под NT системами, у меня возникла в 2k, а вот в win98 всё прошло на ура!, не перестаю повторять МАСТДАЙ РУЛИТ ;-)


Дата: Июн 14, 2004 13:17:18

А процесс-то запускается через CreateProcess или нет?
Если да, то, как писалось выше, кто мешает по его HANDLE отследить все что нужно?


Дата: Июн 14, 2004 13:57:29

Процесс запускается, но он SUSPENDED в момент снятия снапшота (хотя в общем случае, если он до этого работал и был осановлен позднее, то никаких ошибок не возникает)

кто мешает по его HANDLE отследить все что нужно?
единственный вариант, который может работать (я его еще не проверил Ж) ):
под 9х - снапшот
под НТ - psapi.


Дата: Июн 14, 2004 18:25:55

МАСТДАЙ РУЛИТ ;-)

МАСТДАЙ МАСТ ДАЙ!


Дата: Июн 14, 2004 20:29:01

Под ХР можно сделать через Debug API(там из соответствующей структуры взять эти данные) и потом DebugActiveProcessStop и можно спокойно отпустить процесс ;-)
Поэтому ХР'ень тоже рулит здесь ;-)


Дата: Июл 7, 2004 23:09:46

я, конечно, не исключаю кривые руки.... но psapi не работает Ж)
код:

if ( !CreateProcess(0, argv[1], 0, 0, 0, CREATE_SUSPENDED, 0, 0, &startInfo, &procInfo)) {
return 1;
}

CloseHandle(procInfo.hProcess);
CloseHandle(procInfo.hThread);

procInfo.hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, procInfo.dwProcessId);

if ( !EnumProcessModules(procInfo.hProcess, handle_list, sizeof(handle_list), &handle_list_filled)) {
puts("Unable to enumerate process modules");
return 1;
}

кстати, а после возврата из CreateProcess процесс уже существует или только "в планах" ?


Дата: Июл 7, 2004 23:33:09

DarkK

„CloseHandle(procInfo.hProcess);
CloseHandle(procInfo.hThread);

procInfo.hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, procInfo.dwProcessId); “


А это еще зачем?


Дата: Июл 7, 2004 23:45:47

на всякий случай.
просто я не знаю, все л имне привелегии даст CreateProcess.
на результат это никак не влияет.


Дата: Июл 8, 2004 04:07:44

DarkK

А зачем тебе нужно то это?
Единственный нормальный вариант это реализовать через Debug API, пример есть у Iczelion'а, ну подумаешь твой родительский процесс будет висеть в памяти до завершения дочернего, но ведь Armadillo успешно так работает ;-)


Дата: Июл 9, 2004 14:26:09

Entry point нужен, чтобы его переписать.
Пока просто выдираю его из PE-header, но кто сказал, что .exe никогда не будет загружен по адресу, отличному от указанного...

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.038