Мне нужно взять перемещаемый файл ELF и исправить адреса в MSP430-F5529 с красным хэт-компилятором (не TI). Однако я не понимаю, как должны быть сделаны перемещения, поскольку я не использую эти обозначения.Перемещение типов ELF на MSP430
Here - это виды и их детали.
Давайте возьмем это, например.
- Имя: R_MSP430X_ABS20_ADR_DST
- знаковости: неподписанный
- ContainerSize: 32
- поле: [0,4] + [16,16]
А следующее генерируются ASM:
0C60 0000 : MOVA R12, &0x00000
Если мы ищем MOVA
опкод в Wikipedia мы видим, что структура опкодом как это следующим образом:
Offset : [7] [6] [5] [4] [3] [2] [1] [0]
Hex Value : [0] [dst] [6] [src] [src] [src] [src] [src]
Теперь мы знаем, что Dst C обозначает R12 и что последние 20 бит предназначены для замены адреса (последние 4 бита плюс еще 16 бит - последние 4 0s-).
Я знаю, что нужно понимать, как интерпретировать [0,4]+[16,16]
. Похож на [0,4]
ссылки на последние 4 бита на первые 2 байта (006 0000), но как это работает? И как мне читать [16,16]
?
Вот цитата объяснения в PDF-документе, если кто-то это понимает.
В поле задается с помощью кортежа [CS, О, FS], где CS является размером контейнера, вывод является исходным смещением от МЗБА контейнера к МДРУ поля, и FS - размер поля. Все значения находятся в битах. Обозначения [x, y] + [z, w] указывают на то, что перемещение занимает несмежные диапазоны бит, которые должны быть объединены для формирования поля.
Спасибо.
Ответ выглядит потрясающе.Я действительно думаю, что вы просто решили это, но есть кое-что, о чем я беспокоюсь. Википедия говорит, что это * Построено вокруг 16-битного процессора *. Имеет ли значение при чтении 32 байта? Это все еще читает это так? – UDKOX
Перемещение только описывает, как поля выкладываются в памяти. Это не имеет никакого отношения к тому, как CPU читает и выполняет их. –
Я проверяю его на работе и вернусь. Если это так, я пойму, как отметить свой ответ, как принято! Данке! – UDKOX