· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Почему под виндой можно писать в сегмент кода?

Посл.отвђт Сообщенiе


Дата: Дек 24, 2003 09:32:15

В описании от Intel часть упоминается запрет на запись в сегмент кода.
По этому и возник сабжевый вопрос.
Ткните пожалуйста туда где это объясняется.
ЗЫ. В подписку BrokenSword тыкать не надо.


Дата: Дек 24, 2003 10:01:46

все дело в правах доспута в защищенном режиме процессора.... если разрешено - то почему-бы и не писать?


Дата: Дек 24, 2003 10:18:22

При чем здесь права доступа, если черным по белому написанно, что нельзя писать в сегмент типа 'code'.
Может быть под виндой сегментная защита отключена? А используется только страничная защита?


Дата: Дек 24, 2003 10:20:23

Ты, похоже, путаешь сегменты с секциями. Сегмент кода - это CS. Если ты напишешь mov [cs:var],0 то получишь заслуженное исключение. А когда ты пишешь просто mov [var],0 по умолчанию используется сегмент DS, вне зависимости от того, в какой секци находится var. Просто одна и та же память адресуется двумя разными сегментами, в одном из которых можно исполнять код, а во второй писать...


Дата: Дек 24, 2003 10:24:26 · Поправил: Valery

capgreen

запусти сайс и увидишь все атрибуты


Дата: Дек 24, 2003 10:29:48 · Поправил: capgreen

Чукча умный: CS - это регистр ;)
А что будет если загрузить CS в DS что будет?
По мои понятиеям всё равно всё должно поламаться.
У BS вроде написано что должно работать.

ЗЫ. сегментную защиту можно отключить только вместе с сегментной адресацией. ;)


Дата: Дек 24, 2003 10:30:07

capgreen

Может быть под виндой сегментная защита отключена

Ее отключить невозможно. Атрибуты сегментов проверяются раньше страничных


Дата: Дек 24, 2003 10:35:42 · Поправил: capgreen

Вот что написано у BS:
Чтобы не растекаться мыслью по древу сразу скажу: #GP возникнет если:
...
при записи в «ИСПОЛНЯЕМЫЙ» сегмент (т.е. писать в сегмент кода нельзя через CS, через DS - пожалуйста);
...


так вот мне не понятен этот тезис.

а вот что написаноо у Intel

No instruction may write into an executable segment.


предикат "executable", по-моему, определяется не тем, гда лежит селектор сегмента, а только полем "тип" сегмента.


Дата: Дек 24, 2003 11:28:04

Под виндой используется flat model. Т.е. все сегментные регистры (кроме fs) указывают на одну область памяти.
Поэтому можно еще и использовать на свое усмотрение регистры EBP & ESP, а не только так как написано в доках у intel.


Дата: Дек 24, 2003 11:32:55

Про flat model я в курсе, меня интересует можно таки использовать слектор сегмента кода для записи или нет?


Дата: Дек 24, 2003 12:13:12 · Поправил: bsl_zcs

Наконец, ты смог правильно сформулировать вопрос.

На него ответ прост и однозначен: безусловно, нет.

А в той цитате, что ты привёл, лажа. Возможно, эта фраза вырвана из контекста. Тобой или автором статьи...


Дата: Дек 24, 2003 12:38:00 · Поправил: capgreen

Правильно ли я понимаю, что в Windows используется "Basic Flat Model" (как она описана в доках Intel)?


Дата: Дек 24, 2003 19:10:02

Ага. Особенно близко из того описания к ней подходит фраза More complexity can be added to this protected flat model ;)

В целом, видимо, да. Но, как я понимаю, рисунок не подходит - пропуска физически отсутствующей памяти там нет.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.158