KIV писал(а):
На мой взгляд самое лучше - пи код. Поскольку релоки могут занимать много места и требуют усложнения загрузчика.
Как я понял это тоже самое что и байт-код. Т.е. ты считаешь потеря производительности при выполнении команды байт-кода более оправдано, чем немного больше места для релока?
KIV писал(а):
Но делать таблицу переменных считаю не рациональным - достаточно одного базового адреса, а смещения в этом блоке уже жёстко заданы в программе, хотя это не мешает разместить данные в любом месте памяти указав другую базу.
Точно! чтото я просто не додумался, что достаточно добавить макрос, который будет:
- получить смещение относительно программы (это то что мне мешало переносить код в другое место)
- отнять от этого смешения адрес начала данных (получается смещение относительно начала данных)
- прибавить к этому смещению EBX (адрес, где реально разместились данные)
Все. Никаких RVA таблиц не нужно! )) Гениальное - просто.
KIV писал(а):
(кстати, лучше не ESI, а EBX, чтобы не лишать программиста строковых команд)
Полезно. Спасибо. Хотя еще не пробовал использовать, как предлагалось, сегментные регистры.