назначение памяти

Тема в разделе "WASM.WIN32", создана пользователем valinor, 10 окт 2005.

  1. valinor

    valinor New Member

    Публикаций:
    0
    Регистрация:
    7 май 2005
    Сообщения:
    27
    Как имея user-mode адрес определить для чего предназначена память (стек/куча/код итд) и какой модуль ее выделил?
     
  2. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    делал нечто подобное так:



    MEMORY_BASIC_INFORMATION m;

    VirtualQuery(addr,&m,sizeof(m));

    addr=(char*)m.BaseAddress-0x1000;

    VirtualQuery(addr,&m,sizeof(m));

    if (m.Protect&PAGE_GUARD)

    {

    // addr - указатель на стек

    };



    GetProcessHeaps - см msdn



    HANDLE h;

    MODULEENTRY32 m;

    h=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pid);

    if (h==INVALID_HANDLE_VALUE) return NULL;

    m.dwSize=sizeof(MODULEENTRY32);

    if (Module32First(h,&m)==FALSE)

    {CloseHandle(h);return NULL;};

    do

    {

    if ((addr>=m.modBaseAddr)&&

    (addr<(m.modBaseAddr+m. modBaseSize)))

    {

    // addr - принадлежит dll

    };

    } while (Module32Next(h,&m)!=FALSE);

    CloseHandle(h);
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Принадлежность адреса стеку текущего треда, ИМХО проще и надежнее проверять через TIB.StackBase и TIB.StackLimit
    Код (Text):
    1. mov ecx,MemAddr
    2. xor eax,eax
    3. mov edx,fs:[18h]
    4. cmp ecx,[edx+4]  ;TIB.StackBase
    5. jbe @F
    6. cmp ecx,[edx+8]  ;TIB.StackLimit
    7. ja  @F
    8. inc eax          ;адрес в стеке текущего треда
    9. @@:
     
  4. DESTROY_ru

    DESTROY_ru New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    17
    Посмотри Джефри Рихтера там про память объясняется практически всё + исходники примеров...