Исполняемый код

Тема в разделе "WASM.BEGINNERS", создана пользователем evgop, 28 окт 2005.

  1. evgop

    evgop New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2005
    Сообщения:
    7
    Адрес:
    Moscow
    Внутри своей прикладной программы я хотел бы кое-что компилировать. Когда писал под DOS, проблем не возникало - выделял кусок памяти, заполнял сгенерированным кодом и передавал управление. Если сделать так же в Win32, то есть jmp/call на память, выделенную из кучи, разумеется будет ошибка, так как процессор считает, что это данные.



    Вопрос - как прикладному процессу в Win32 выделить память для исполняемого кода?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    почитай VirtualProtect и его флагах.
     
  3. evgop

    evgop New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2005
    Сообщения:
    7
    Адрес:
    Moscow
    <font color="navy]
    </font><!--color-->



    О! Спасибо! Не знал, что всё так просто!
     
  4. Maggot

    Maggot New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2005
    Сообщения:
    17
    >>разумеется будет ошибка, так как процессор считает, что >>это данные.



    А вроде процу всё равно чё исполнять... Есть команда jmp, так значит он и будет выполнять, то, на что она указывает
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Maggot

    > "А вроде процу всё равно чё исполнять..."

    Это смотря какому процу и под какой ОС. Ты слышал об аппаратном DEP, NX и ED битах атрибутов страниц в новых процах AMD и Intel ? См.
     
  6. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    GlobalAlloc

    GlobalLock
     
  7. IceStudent

    IceStudent Active Member

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

    Выбрось каку.
     
  8. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    почему же каку?

    Я вот на днях Winlogon ковырял от W2k3 x64 Sp1 так там во всю юзается LocalAlloc. А нам что, нельзя что-ли? :)
     
  9. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Zufyxe

    > "почему же каку?"

    Потому что они obsolete и на помойку их не выкинули лишь 1) ради обратной совместимости c 16-бит Windows, 2) традиции передавать в SetClipboardData данные, выделенные GlobalAlloc с флагом GMEM_MOVEABLE



    > А нам что, нельзя что-ли? :)

    Да ради бога ;) Только посмотри на реализацию GlobalAlloc в kernel32 и увидишь, что она лишь наворачивают кучу ненужной шелухи на вызов kernel32.HeapAlloc = ntdll.RtlAllocateHeap. Дык не лучше ли напрямую юзать HeapAlloc и не пудрить мОзги с устаревшими флажками GMEM_MOVEABLE\GMEM_FIXED
     
  10. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia


    - знаю, и смотрел. Только вот позиция M$ в этом вопросе кажется все более удивительной... :)