VirtualAlloc в фасме...

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

  1. Smith

    Smith New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2005
    Сообщения:
    18
    Адрес:
    Russia
    Покажите как плиз как в фасме буит выглядеть код, который через ф-ю VirtualAlloc буит выделать 16кб...
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    а что тут такого особенного?
    invoke VirtualAlloc, ....
    или если без макроса инвоук -
    push ...
    push ...
    call [VirtualAlloc]
     
  3. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Smith
    а еще паить буит выделать через GetProcessHeap и HeapAlloc ;)
     
  4. Smith

    Smith New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2005
    Сообщения:
    18
    Адрес:
    Russia
    ну на Си я знаю как там передаешь указатель и если все норм то ему выделиться память... а на асме как ведь если в секции .data указать тип то памяти ему больше не выделится...
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Smith
    че ты несешь то7 я ниче не понял.

    протoтип:
    Код (Text):
    1. LPVOID VirtualAlloc(
    2.     LPVOID lpAddress,   // address of region to reserve or commit  
    3.     DWORD dwSize,   // size of region
    4.     DWORD flAllocationType, // type of allocation
    5.     DWORD flProtect     // type of access protection
    6.    );
    на фасме:

    Код (Text):
    1. section 'data' data readable writable
    2. buffer dd ?
    3. size equ 16*1024
    4.  
    5. section 'text' code readable executable
    6. push PAGE_READWRITE
    7. push MEM_COMMIT+MEM_RESERVE
    8. push size
    9. push 0
    10. call [VirtualAlloc]
    11. mov [buffer], eax
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Smith
    Что-то вы путаете батенька, VirtualAlloc - ом в переменную передаётся указатель на выделенную память, а в .data ничего не выделяется.
     
  7. Smith

    Smith New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2005
    Сообщения:
    18
    Адрес:
    Russia
    пасиб... вот и все что мне требовалось...
     
  8. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Smith
    Код (Text):
    1. LOCAL lpArgs:DWORD;место под указатель
    2. ....
    3. push 1024
    4. push GMEM_FIXED or GMEM_ZEROINIT
    5. call _imp__GlobalAlloc@8;выделяю 1024 байт
    6. mov lpArgs, eax;получаю указатель
    7. ...
    8. push lpArgs
    9. call _imp__GlobalFree@4;возвращаю память
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Mikl__
    жесть. у нее параметры другие. мой код выше рабочий )
     
  10. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Great
    Никогда не задумывался, работало...
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Mikl__
    ой ) спутал с VirtualAlloc. Но просили-то VirtualAlloc, а не GlobalAlloc :)
     
  12. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Great
    Тут как в конфу, одно и то же 60 способами, обрати внимание на #3
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Mikl__
    тут не одно и то же
    GlobalAlloc & HeapAlloc выделяют память в куче.
    VirtualAlloc выделяет отдельные страницы памяти
     
  14. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Great
    Ты победил, о Великий Гуру!!!