Узнать адрес EPROCESS из дампа памяти

Тема в разделе "WASM.NT.KERNEL", создана пользователем FreeX, 14 июн 2009.

  1. FreeX

    FreeX New Member

    Публикаций:
    0
    Регистрация:
    19 май 2009
    Сообщения:
    13
    Вопрос в следующем. Есть полный дамп физической памяти системы. Есть значения регистров, eax, ebx и компании, также Cr3, Gdtr, Ldtr и компании на момент создания дампа. Хочу по дампу памяти перечислить все активные процессы в системе, т.е UCHAR ImageFileName[16] из структуры EPROCESS, a по LIST_ENTRY ActiveProcessLinks переходить на следующий структуры EPROCESS. Только вот как найти хотя бы одну структуру EPROCESS не могу додуматься...
    PS. придумал только один очень топорный метод, но я не верю что нет других методов))
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Найти ядро в памяти, в нём найти переменную PsActiveProcessHead, эта двусвязанный список и пройтись по нему, типо как в PsEnumProcesses(). Это теоретически, на практике никогда из дампа эту инфу не вытягивал.
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Честно говоря, не понимаю в чём проблема. Если дамп был создан самой операционной системой в виде .dmp-файла (например, при падении), тогда достаточно загрузить его в WinDbg и дать команду !process 0 0. Если дамп создан другим способом, следует для начала указать каким именно.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    x64
    Даже если дамп и есть не факт что виндбг его прочитает. Для процесса в контексте которого крах произошёл наиболее просто видимо определить из GDT указатель на PCR(PKPRCB = +0x124) и из него взять указатель на тред, затем из этого ETHREAD указатель на процесс.
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    в дамп, afaik, записываются некоторые неэкспортируемые переменные ядра. PsActiveProcessHead в том числе.
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    FreeX
    Я не понял, тебе программно чтоли это нужно сделать?
    Ну в чем тогда проблема, к виндбг идет хелп, где есть и апи dbgeng.dll комовские в том числе. Ну это через ком интерфейс. Либо - я даже статью писал про формат. Для быстренького выдирания нужных данных можно и вручную по дампу пройтись (в смысле, без виндбг)

    Clerk
    Даже ничего искать не придется, я писал в статье про формат дампов, что туда пишется целый блок неэкспортиуемых переменных, в том числе и она.
    Это ты о чем "не факт что виндбг его прочитает"?
     
  7. FreeX

    FreeX New Member

    Публикаций:
    0
    Регистрация:
    19 май 2009
    Сообщения:
    13
    у меня сырой дамп памяти, содержимое физ памяти как есть, и больше ничего. (не дамп, который система генерит)
    Вот, спасиб, так сделать получилось...
    Только пару вопросов осталось... где можно почитать про структуру GDT, и обязательно ли в ring0 FS = 0x3B, а в ring3 FS = 0x30?
     
  8. wasm_test

    wasm_test wasm test user

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

    это было неочевидно из 1 поста)
    да хотя бы у брокен сворда на этом сайта.
    а лучше - в интел мануалах. первоисточник все-таки
     
  9. FreeX

    FreeX New Member

    Публикаций:
    0
    Регистрация:
    19 май 2009
    Сообщения:
    13
    спасиб;) тему можно закрыть