Внутри своей прикладной программы я хотел бы кое-что компилировать. Когда писал под DOS, проблем не возникало - выделял кусок памяти, заполнял сгенерированным кодом и передавал управление. Если сделать так же в Win32, то есть jmp/call на память, выделенную из кучи, разумеется будет ошибка, так как процессор считает, что это данные. Вопрос - как прикладному процессу в Win32 выделить память для исполняемого кода?
>>разумеется будет ошибка, так как процессор считает, что >>это данные. А вроде процу всё равно чё исполнять... Есть команда jmp, так значит он и будет выполнять, то, на что она указывает
Maggot > "А вроде процу всё равно чё исполнять..." Это смотря какому процу и под какой ОС. Ты слышал об аппаратном DEP, NX и ED битах атрибутов страниц в новых процах AMD и Intel ? См.
почему же каку? Я вот на днях Winlogon ковырял от W2k3 x64 Sp1 так там во всю юзается LocalAlloc. А нам что, нельзя что-ли?
Zufyxe > "почему же каку?" Потому что они obsolete и на помойку их не выкинули лишь 1) ради обратной совместимости c 16-бит Windows, 2) традиции передавать в SetClipboardData данные, выделенные GlobalAlloc с флагом GMEM_MOVEABLE > А нам что, нельзя что-ли? Да ради бога Только посмотри на реализацию GlobalAlloc в kernel32 и увидишь, что она лишь наворачивают кучу ненужной шелухи на вызов kernel32.HeapAlloc = ntdll.RtlAllocateHeap. Дык не лучше ли напрямую юзать HeapAlloc и не пудрить мОзги с устаревшими флажками GMEM_MOVEABLE\GMEM_FIXED