Покажите как плиз как в фасме буит выглядеть код, который через ф-ю VirtualAlloc буит выделать 16кб...
а что тут такого особенного? invoke VirtualAlloc, .... или если без макроса инвоук - push ... push ... call [VirtualAlloc]
ну на Си я знаю как там передаешь указатель и если все норм то ему выделиться память... а на асме как ведь если в секции .data указать тип то памяти ему больше не выделится...
Smith че ты несешь то7 я ниче не понял. протoтип: Код (Text): LPVOID VirtualAlloc( LPVOID lpAddress, // address of region to reserve or commit DWORD dwSize, // size of region DWORD flAllocationType, // type of allocation DWORD flProtect // type of access protection ); на фасме: Код (Text): section 'data' data readable writable buffer dd ? size equ 16*1024 section 'text' code readable executable push PAGE_READWRITE push MEM_COMMIT+MEM_RESERVE push size push 0 call [VirtualAlloc] mov [buffer], eax
Smith Что-то вы путаете батенька, VirtualAlloc - ом в переменную передаётся указатель на выделенную память, а в .data ничего не выделяется.
Smith Код (Text): LOCAL lpArgs:DWORD;место под указатель .... push 1024 push GMEM_FIXED or GMEM_ZEROINIT call _imp__GlobalAlloc@8;выделяю 1024 байт mov lpArgs, eax;получаю указатель ... push lpArgs call _imp__GlobalFree@4;возвращаю память
Mikl__ тут не одно и то же GlobalAlloc & HeapAlloc выделяют память в куче. VirtualAlloc выделяет отдельные страницы памяти