Здравствуйте. Я программирую на ассемблере. Вопрос: можно ли в сегменте кода выделять память для данных? Примерно так:
jmp $+4
byte1 db 0
byte2 db 0
я ассемблирую с помощью TASM. Знак доллара означает текущий адрес. Jmp $+4 перепрыгивает саму инструкцию jmp (два байта), плюс два байта объявленных далее. То есть идея такова: в сегменте кода я выделяю кусок, который, если всё правильно сделать, никогда не будет исполняться, а пользоваться я им буду для хранения некоторых данных.
Программа с такими конструкциями нормально компилируется, линкуется.
Можно ли объявлять данные в сегменте кода?
Модератор: Andy
Можно. Является основной стратегией самомодифицирующегося кода.
It's a long way to the top if you wanna rock'n'roll
(Эх... термины бы вспомнить...) Если для защищенной модели, то, насколько я представляю, не прокатит. Там защита на уровне операционки на чтение/запись из сегмента кода.somewhere писал(а):Можно. Является основной стратегией самомодифицирующегося кода.
Помню, в библиотеке Turbo Professional (для Паскаля) было немало ассемблерных модулей, в которых присутствовали данные в сегменте кода. Для реальной модели памяти все это превосходно работало. Народ как-то попробовал скомпилить библиотеку (благо, исходники были доступны) для защищенной. Скомпилиться скомпилировалоь, но при работе грохалось.