Страница 1 из 1

Можно ли объявлять данные в сегменте кода?

Добавлено: 26 апр 2009, 14:33
Blind Guardian
Здравствуйте. Я программирую на ассемблере. Вопрос: можно ли в сегменте кода выделять память для данных? Примерно так:

jmp $+4
byte1 db 0
byte2 db 0

я ассемблирую с помощью TASM. Знак доллара означает текущий адрес. Jmp $+4 перепрыгивает саму инструкцию jmp (два байта), плюс два байта объявленных далее. То есть идея такова: в сегменте кода я выделяю кусок, который, если всё правильно сделать, никогда не будет исполняться, а пользоваться я им буду для хранения некоторых данных.
Программа с такими конструкциями нормально компилируется, линкуется.

Re: Можно ли объявлять данные в сегменте кода?

Добавлено: 26 апр 2009, 17:00
somewhere
Можно. Является основной стратегией самомодифицирующегося кода.

.

Добавлено: 27 апр 2009, 11:53
BBB
somewhere писал(а):Можно. Является основной стратегией самомодифицирующегося кода.
(Эх... термины бы вспомнить...) Если для защищенной модели, то, насколько я представляю, не прокатит. Там защита на уровне операционки на чтение/запись из сегмента кода.

Помню, в библиотеке Turbo Professional (для Паскаля) было немало ассемблерных модулей, в которых присутствовали данные в сегменте кода. Для реальной модели памяти все это превосходно работало. Народ как-то попробовал скомпилить библиотеку (благо, исходники были доступны) для защищенной. Скомпилиться скомпилировалоь, но при работе грохалось.