Как правильно убивать процесс?

Тема в разделе "WASM.WIN32", создана пользователем gyrus, 19 мар 2007.

  1. PE_Kill

    PE_Kill New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    107
    MSoft
    >> дык ты ж адрес ExitProcess ищешь в своем адресном пространстве! тебе нужен адрес это апишки в искомом
    >> процессе! Если так действовать, то тебе надо будет читать и обрабатывать таблицу импорта и в ней искать эту
    >> функцию. Так таскменеджер явно не делает :)
    ExitProcess лежит в kernel32.dll а значит что адрес этой функи в твоем процессе будет равен адресу в любом другом процессе. Знать как получить адрес апи хэшем и не знать таких основ... как то странно.
     
  2. gyrus

    gyrus New Member

    Публикаций:
    0
    Регистрация:
    19 мар 2007
    Сообщения:
    15
    PE_Kill

    да-да-да... полностью согласен;)
    если бы было так как говорил MSoft, то код из #9 не убивал бы процесс,
    а он это таки делает.
     
  3. gyrus

    gyrus New Member

    Публикаций:
    0
    Регистрация:
    19 мар 2007
    Сообщения:
    15
    Nouzui
    а DLL и через час сама по себе не выгружается.
    при всех трех вариантах.
     
  4. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    все это странно, и убитый тобой процесс не имеет к этому никакого отношения. Во-первых, о какой длл идет речь? не из system32
    во-вторых, тот же process explorer может искать по имени загружнные dllки в других процессах. стоит проверить, не загружена ли она куда-нибудь еще..
     
  5. gyrus

    gyrus New Member

    Публикаций:
    0
    Регистрация:
    19 мар 2007
    Сообщения:
    15
    Nouzui
    1) библиотека не системная, но лежит именно там. а какую роль это может играть?
    2) см сообщение #3

    собственно, теперь вопрос состоит в том, как осовбодить HANDLы этой библиотеки
    в чужом процессе перед его удалением.
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Ты про базу образа файла слышал что-нибудь??? А про то, что дллки могут грузиться по любому адресу, независимо от того, какая база образа у них прописана в pe-заголовке???
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    посмотрел.. мистика
    виндовый таскмгр перед терминейтом посылает WM_CLOSE главному окну
    и вообще, скажи, что за библиотека (если ее никто больше не использует, то зачем она в system32?), и что за программа
    а также попробуй все таки поискать ее procexplorer'ом
     
  8. gyrus

    gyrus New Member

    Публикаций:
    0
    Регистрация:
    19 мар 2007
    Сообщения:
    15
    да уж, твин пикс...

    окон в убиваемом процессе нет.
    там такой код

    Код (Text):
    1.          
    2.   StartLoop:
    3.   invoke GetMessage,ADDR msg,NULL,0,0
    4.   cmp eax, 0
    5.   je ExitLoop
    6.   invoke TranslateMessage, ADDR msg
    7.   invoke DispatchMessage,  ADDR msg
    8.   jmp StartLoop
    9.   ExitLoop:
    10.  ;  а таск менеджер видимо, умудряется выйти из этого цикла,
    11.  ;  в отличие от TerminateProcess и пр.
    12.   invoke FreeLibrary,hLib
     
  9. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    [deleted]
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    HMODULE hModule = GetModuleHandle("your_fuckin_dll.dll");
    FreeLibrary(hModule);

    dll конечно содержат релоки и все такое. но я довольно редко видел конфликты адресов такие, чтобы дллки релоцировались. хотя, безусловно надо писать правильно =)
     
  11. gyrus

    gyrus New Member

    Публикаций:
    0
    Регистрация:
    19 мар 2007
    Сообщения:
    15
    MSoft
    а какой хеш у функции PostQuitMessage
     
  12. Gelios

    Gelios New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2006
    Сообщения:
    16
    вообще-то база kernel32.dll во всех процессах в системе одна и та же - RTFM. так что PE_Kill тут всё правильно написал
     
  13. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Не знаю. Посмотри в том коде функцию хеширования - я ее специально выделил - и скорми ей эту строку.

    ну-ну, а если понадобятся другие библиотеки, ты тоже будешь загружать ее себе, искать в ней функцию, а потом использовать этот же адрес в другом процессе? Полностью поддерживаю Great:
    И потом, нах в нем релоки, если он однозначно по одинаковым адресам грузится и коллизии невозможны? А если про тагертный процесс все так известно, то можно вааще фиксированные адреса использовать, а не искать их - чем не способ?
     
  14. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    gyrus
    весь мой опыт утверждает, что если убить процесс, то используемые им dll освобождаются независимо от того, была ли вызвана FreeLibary или нет... я много раз слышал про отложенную выгрузку dll, но на практике что-то ничего подобного не замечал, и даже не знаю, как этим процессом управлять. Трудно себе представить, что выгрузка была отложена на час или запрещена совсем, поэтому логичнее поискать, кем еще используется эта dll, не зря же она валяется в system'е.. может, кто-то даже просто открыл ее как файл, и держит таким образом, как бы нелепо это ни звучало
    простой способ проверить - написать свою dll с загружающим ее аппликейшном и проверить, удалится ли эта dll после терминейта процесса

    а по поводу выхода из цикла.. попробуй послать WM_QUIT потоку
     
  15. gyrus

    gyrus New Member

    Публикаций:
    0
    Регистрация:
    19 мар 2007
    Сообщения:
    15
    в другом каталоге все происходит точно также
    удалится. но секунд через 10.
    насколько я понимаю, WM_QUIT можно послать окну, а не потоку.
     
  16. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    gyrus
    А пропробуйте сделать следующее (прокатит в ХР и выше) : вызываем DebugActiveProcess а потом DebugActiveProcessStop.
    Некорректно, но точно убить должно :)
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    он скорее всего имел в виду поток обработки сообщений окна. если оно есть, конечно )
     
  18. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    потоку.
    PostThreadMessage

    ps
    раз удалится, значит длл выгружаются
    с первой происходит что-то особенное
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    И что. Все равно если там нету цикла обработки сообщений, это его не должно убить.
     
  20. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Great
    #28