Безопасно выделить память так?

Тема в разделе "WASM.BEGINNERS", создана пользователем Flasher, 21 апр 2006.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    _AllocateHeap proc near

    arg_0 = dword ptr 4

    assume fs:nothing

    mov eax,fs:18h

    push [esp+arg_0]

    mov eax,[eax+30h]

    push 0

    push dword ptr [eax+18h]

    call RtlAllocateHeap

    retn 4

    _AllocateHeap endp



    Вроди как работает у меня в ХР sp1 eng

    Скорей хочю знать во всех NT по fs:18h находится ProcessHeap ?

    Спасибо.
     
  2. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    наверна в 98х виндах небудет работать хотя...
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    100% гарантии неизменности (всей) структуры PEB наверное никто дать не может, но [PEB+18h] = ProcessHeap во всех NT и даже в 9х (хотя в целом в 9х структура PEB сильно отличается от NT)



    PS: единственное, чего я не могу понять - почему доступ к PEB осуществляется в винде не напрямую через fs:[30h], а зачем-то сначала получают адрес TEB через fs:[18h], хотя он совпадает с базовым адресом сегмента fs. Может кто знает ?
     
  4. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Flasher

    В этой статейке обращение к PEB как раз напрямую идет через fs:[30h]. А вот в самой винде всегда окольным путем через Teb=fs:[18h] - как и в твоем варианте



    А вот некоторые вещи из статьи устарели - в XP SP2 адреса TEB и PEB не фиксированы, поэтому расчитывать на константы типа 7FFDF000h уже нельзя и основанный на этом метод определения типа ОS (NT или 9x) работать не будет. (Кстати надежнее было бы использовать сравнение с 80000000h - в NT всегда ниже, а в 9х всегда выше)