Про SizeOfStackReserve и SizeOfStackCommit

Тема в разделе "WASM.WIN32", создана пользователем EvilsInterrupt, 22 ноя 2004.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Binary digit, wasm`овцы.



    вопрос по pe-формату:



    У меня вопросы по формату исполнимых файлов, Portatible Executable.

    Если следовать именам инклуда winnt.h, то меня интерисуют следую-

    щие поля:



    SizeOfStackReserve и SizeOfStackCommit



    Про два этих поля я читал в Питреке, статье Касперски и даже в упа-

    ковщиках от Volodya не нашел исчерпывающего ответа на вопрос о том,

    что же эти поля представляют? Замечу не расплывчатых а достаточных

    для понимания сведений, но это относительно моего интелекта, возмож-

    но кто-то читал и понял истинное значение этих полей.



    А поэтому будьте добры ответить на этот вопрос.



    ;############################3



    Вопрос по инструментарию:



    Когда то я уже задавал вопрос по импорту, но придется еще раз

    его задать.Если написать код:



    invoke MessageBox,addr txt_1,addr txt_2,MB_OK



    то ассемблер из пакета masm32 для этого вида импорта сделает следую-

    щую цепочку:



    call MessageBox

    MessageBox: jmp dword [address]



    Но кто то мне говорил, что есть какой то красивый "?.bat"-файл, кото-

    рый позволит делать цепочку:



    call dword [address]



    Если не ошибаюсь, то это был bogrus. Порывшись по нэту и потероризиро-

    вав гугла, я натыкался на записи, что можно сделать ЭТУ ЦЕПОЧКУ, но

    этом ГДЕ это файл скачать(читай рабочую ссылку!) я не нашел! :dntknw:



    Попрошу уважаемое собрание о том, что если кто-то имеет или знает ссыл-

    ку, замечу РАБОЧУЮ, то просьба поделиться на int20h@yandex.ru!
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    EvilsInterrupt



    Надеюсь, эта ссылка окажется рабочей… А вообще-то, этот вопрос не раз всплывал здесь: соседний топик



    Насчёт первого вопроса: это обсуждалось уже и вроде бы даже на этом форуме.



    Если просто, то поле SizeOfStackReserve указывает загрузчику, сколько памяти зарезервировать под стек (по аналогии с VirtualAlloc(…,MEM_RESERVE,…) ).

    То есть, память будет зарезервирована, но не выделена.



    SizeOfStackCommit даёт указание выделить определённый размер памяти под стек.



    Чаще всего, выделяется 4кб памяти (1 страница под Win2k), а резервируется 1 Мб. Если ты читал про РЕ, то помнишь, что за выделенной страницей идёт ещё одна: сторожевая. Это хорошо описано в «Упаковщиках».
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    И ещё. Если в заголовке РЕ не указывать эти поля, то система выделит память, размером в 1 страницу (SYSTEM_INFO.dwPageSize), а зарезервирует 64 Кб (SYSTEM_INFO.dwAllocationGranularity).



    А насчёт "аналогии с VirtualAlloc" — тут даже не аналогия. Система при создании стека пользуется именно этой функцией:


    Код (Text):
    1.  
    2. LPVOID lpStack = NULL;
    3. lpStack = VirtualAlloc(lpStack,dwSizeOfStackReserve,MEM_RESERVE,PAGE_READWRITE);
    4.  
    5. lpStack += dwSizeOfStackReserve - wSizeOfStackCommit;
    6.  
    7. // если выделяется не вся память (dwSizeOfStackReserve)
    8. // то определяется сторожевая страница
    9. if(dwSizeOfStackReserve > dwSizeOfStackСommit){
    10.   lpStack -= SysInfo.dwPageSize;
    11.   dwSizeOfStackCommit += SysInfo.dwPageSize;
    12.   IsGuardPage = TRUE;
    13.   } else {
    14.   IsGuardPage = FALSE;
    15.   }
    16.  
    17. lpStack = VirtualAlloc(lpStack,dwSizeOfStackCommit,MEM_COMMIT,PAGE_READWRITE);
    18.  
    19. if(IsGuardPage){
    20.   VirtualProtect(lpStack,SysInfo.dwPageSize,PAGE_GUARD |
    21.          PAGE_READWRITE,&dwOldProtect);
    22.   }
    23.  
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    А слабо мне на мыло кинуть? У меня так и нехочет качаться :dntknw: