в дате, т.е. это в ассемблер заложено, что в связке с rip от rip вычисляется оффсет до метки, а не абсолютный адрес метки? И какова реальная польза от этого? Мы же в любом случае получим линейный адрес до метки данных, или же тут возьмётся именно оффсет по аналогии с относительными переходами?
Да, офсеты вычисляются, и всё работает точно так же как с относительными переходами. Реальная польза в том, что код работает независимо от того, по какому адресу его загрузили. Это позволяет обойтись без или хотя бы уменьшить таблицу поправок, и, соответственно, избавиться от лишнего дублирования страниц из-за copy-on-write в секциях кода.
Ручная адресация относительно rip, думаю не нужна обычно
Ты имеешь в виду не нужно считать размер инструкций и хардкодить относительно rip?
Да просто указывай обычную метку и всё само должно посчитаться, поскольку на x86_64 нет адресации по абсолютному смещению
Обсуждают сегодня