Как получить список модулей 64-битного процесса из 32-битной программы?

Тема в разделе "WASM.WIN32", создана пользователем wmaster575, 2 янв 2018.

Метки:
  1. wmaster575

    wmaster575 New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2017
    Сообщения:
    6
    Всех с наступившим Новым Годом!
    В своей программе мне нужно получить список модулей загруженных в любой другой процесс.
    Сама программа 32-битная. Для получения списка модулей использую функцию EnumProcessModulesEx(). Для 64-битных процессов список модулей она не возвращает.
    Пока я думаю сделать отдельный 64-битный процесс и через него обмениваться данными. Написать функцию-обертку, которая будет отсылать запрос в этот процесс, наподобие
    "получить список модулей такого-то процесса", а затем пересылать результат в мою программу.
    Ещё вариант - COM Surrogate, но ничего толком не нашёл.
    Подскажите, пожалуйста, какие есть ещё варианты? Либо, может есть простой вариант, без этих заморочек.
    P.S. Вариант скомпилировать программу под 64 бита не предлагать).
     
  2. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Распарси PEB (адрес возьми из NtQueryInformationProcess), из него вытащи структуру PEB_LDR_DATA (Peb->Ldr). В ней указатель на двусвязный список структур LDR_MODULE (Peb->Ldr->InLoadOrderModuleList.Flink).
    Обходишь его, читаешь структурки.
    Чтобы работать с памятью чужих процессов, используй ReadProcessMemory.

    Если из x64 будешь читать память 32х-битных процессов (для аналогичной задачи, например), используй NtWow64QueryInformationProcess64 и NtWow64ReadVirtualMemory64, и не забудь, что у 32х-битных процессов на 64х-битных Windows есть два PEB'a с соответствующими модулями - для х32 и х64 отдельно.
     
    Последнее редактирование: 13 янв 2018
  3. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Наоборот, из 32 битного процесса читать память 64 битного.
     
    HoShiMin нравится это.
  4. wmaster575

    wmaster575 New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2017
    Сообщения:
    6
    Спасибо, разобрался.
     
  5. superakira

    superakira Guest

    Публикаций:
    0
    либо через х-ворота
     
  6. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    А для простых смертных? Бросайте привычку говорить жаргонизмами и сокращениями, усугубляя недосказанностью. Как, по-вашему, ТС будет это гуглить? Раз начали - потрудитесь объяснить, что конкретно нужно сделать, чтобы использовать "х-ворота", чем бы они ни были.
     
    wmaster575 нравится это.
  7. superakira

    superakira Guest

    Публикаций:
    0
    heavens gate же
     
  8. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Так бы сразу и написали. У меня первая ассоциация с "х" - eXecutive. И в гугле по запросу x-gates ожидаемо нашёл не то :don-t_mention:
     
  9. superakira

    superakira Guest

    Публикаций:
    0
    HoShiMin, мне было лень переключать раскладку на клаве... но ты меня заставил