модифицирование кода
подскажите как можно в вин32 во время выполнения модифицировать код.
Честно говоря не знаю, как это под Win32, но просто по теории защищенного режима нужно создать псевдодескриптор, ссылающийся на нужный сегмент, но с правами записи, то есть сегмент с тем же абсолютным адресом, что и у сегмента кода, но с другими нужными аттрибутами сегмента. Для предотвращения конфликтов советую изменять сегмент кода из другого сегмента кода, то есть перед изменением сменить текущий сег. кода на тот, который содержит процедуры по изменению.
а высокоуровневые компиляторы просто все данные и код положат в разные секции и все.
Так вот если ты знаешь структуру PE-файла (exe под винды), то в нем есть таблица объектов(секции), в которых есть характеристики подправив которые можно модифицировать что угодно в пределах размера
программы.
Best regardz from JAM.
mailto [EMAIL]jamk@mail.ru[/EMAIL]
если так не хоцца то можно в hiew немного поменять заголовок проги ..
а разве чтобы из сегмнета данных что-то выполнить, его не нада модифицировать(в вин98 вроде надо)
Цитата:
On 2002-01-15 1604, bi0id wrote
а разве чтобы из сегмента данных что-то выполнить, его не нада модифицировать(в вин98 вроде надо)
Кстати, да. Ведь в PM каждый сегмент имеет строго определенный тип (код, стек, данные, спецсегмент и т.д.), и если загрузить указатель на сегмент кода не в CS, то сразу будет ошибка (кажется, General Protected Mode).
ошибка защиты.Переход на сегмент данных сделать можно, но записаться в секцию кода всё
равно не получится.Можно изменить атрибут секции в тексте exe'шника на writable.Если исходник чужой(файл изменять нежелательно).
То надо создавать псевдоним дескриптора на секцию кода с правами записи в необходимую область.