-
- Фигня полная. В памяти могут быть релоцируемые полуслова, например.
Или хуже того, что-то такое, у чего выравнивание зависит от адреса.
Т.е. условно легло оно на границу кратную 256 -- так и лежит. А
если положили на не кратную -- самоподтягивается вверх до кратной
256. Что будешь делать? Я конечно понимаю, что компилятор генерит
меньшее многообразие, чем позволяет ассемблер, но не полагался
бы... Потому набор релокаций для динамических библиотек сильно уже,
чем для fk0(34 знак., 18.09.2020 23:41)
- не очень понимаю "А если положили на не кратную " я все го лишь
меняю адреса .... За эти дни я физически перелопатил все возможные
вариант и сделал вывод что все сводится к подмене адресов! в общем
посмотрим! в логгер добавил события, будем посмотреть ! - Aleksey_75(18.09.2020 23:50)
- ELF в конечном счёте состоит из секций, в которых лежат
переменные-объекты или функции кода. И объектный файл тоже из таких
секций. А дальше начинаются приключения. Объекты сложенные в секцию
.data могут иметь условие выравнивания на какую-то границу. Сами
секции тоже. Функции должны быть выравнены на границу из 16 байт
(так может требовать ABI -- иначе что-нибудь поломается в коде, сам
процессор-то исполнять конечно не перестанет). И пока оно всё
внутри объектных файлов -- fk0(1583 знак., 19.09.2020 00:11)
- выравниванием занимается линкер о чем прямо говорит ! один ни тоже код с разными адресами (естественно кратными 4) никуда сьехать физически не может! Aleksey_75(1587 знак., 19.09.2020 00:20)
- ELF в конечном счёте состоит из секций, в которых лежат
переменные-объекты или функции кода. И объектный файл тоже из таких
секций. А дальше начинаются приключения. Объекты сложенные в секцию
.data могут иметь условие выравнивания на какую-то границу. Сами
секции тоже. Функции должны быть выравнены на границу из 16 байт
(так может требовать ABI -- иначе что-нибудь поломается в коде, сам
процессор-то исполнять конечно не перестанет). И пока оно всё
внутри объектных файлов -- fk0(1583 знак., 19.09.2020 00:11)
- не очень понимаю "А если положили на не кратную " я все го лишь
меняю адреса .... За эти дни я физически перелопатил все возможные
вариант и сделал вывод что все сводится к подмене адресов! в общем
посмотрим! в логгер добавил события, будем посмотреть ! - Aleksey_75(18.09.2020 23:50)
- При помощи лома и какой-то матери :-) - SciFi(18.09.2020 22:57)
- Угу! Но мне нужно было само понимание, я его получил! Описаний на
этот счет фактически нету! - Aleksey_75(18.09.2020 23:02)
- Такая методика широко известна, для тех кто сталкивался с 8-битными
игрушками прибитыми к полу. Но так же известно, что она
малоприменима на практике. Ещё доисторический M80 в CP/M умел
генерировать таблицу релокаций, причём лучше (чем вот так)...
Вообще я не совсем понимаю, как ты сможешь разделить .text и .data,
в смысле избавиться от фиксированного смещения между ними.
Допустим, ты по адресу понял, что относится к .text, что к .data и
при загрузке каждый сегмент fk0(522 знак., 18.09.2020 23:52, ссылка, ссылка)
- в бинарнике нет никаких смещений! есть абсолютные адреса! Aleksey_75(110 знак., 19.09.2020 00:00, картинка)
- Ответь для себя на простой вопрос: что случится с указателями на
функции (в месте где они переменной присваиваются), и что случится
в варианте, когда у тебя адрес переменной в коде загружается как
непосредственное значение, но не через LDR, а парой MOV Rn, #imm16
и MOVT Rn, #imm16. - fk0(19.09.2020 00:14)
- Я не изобретаю серебряную пулю! в моем случае подобное в модулях
недопустимо! Хотя и в общем случае , присваивать указатель на
функцию значением идея так себе! - Aleksey_75(19.09.2020 00:24)
- Oh my... А машины состояния как писать? lloyd(62 знак., 19.09.2020 10:44)
- Я не изобретаю серебряную пулю! в моем случае подобное в модулях
недопустимо! Хотя и в общем случае , присваивать указатель на
функцию значением идея так себе! - Aleksey_75(19.09.2020 00:24)
- Ответь для себя на простой вопрос: что случится с указателями на
функции (в месте где они переменной присваиваются), и что случится
в варианте, когда у тебя адрес переменной в коде загружается как
непосредственное значение, но не через LDR, а парой MOV Rn, #imm16
и MOVT Rn, #imm16. - fk0(19.09.2020 00:14)
- в бинарнике нет никаких смещений! есть абсолютные адреса! Aleksey_75(110 знак., 19.09.2020 00:00, картинка)
- Такая методика широко известна, для тех кто сталкивался с 8-битными
игрушками прибитыми к полу. Но так же известно, что она
малоприменима на практике. Ещё доисторический M80 в CP/M умел
генерировать таблицу релокаций, причём лучше (чем вот так)...
Вообще я не совсем понимаю, как ты сможешь разделить .text и .data,
в смысле избавиться от фиксированного смещения между ними.
Допустим, ты по адресу понял, что относится к .text, что к .data и
при загрузке каждый сегмент fk0(522 знак., 18.09.2020 23:52, ссылка, ссылка)
- Угу! Но мне нужно было само понимание, я его получил! Описаний на
этот счет фактически нету! - Aleksey_75(18.09.2020 23:02)
- Фигня полная. В памяти могут быть релоцируемые полуслова, например.
Или хуже того, что-то такое, у чего выравнивание зависит от адреса.
Т.е. условно легло оно на границу кратную 256 -- так и лежит. А
если положили на не кратную -- самоподтягивается вверх до кратной
256. Что будешь делать? Я конечно понимаю, что компилятор генерит
меньшее многообразие, чем позволяет ассемблер, но не полагался
бы... Потому набор релокаций для динамических библиотек сильно уже,
чем для fk0(34 знак., 18.09.2020 23:41)