2016-01-27 6 views
2

Мне нужно взять перемещаемый файл 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] указывают на то, что перемещение занимает несмежные диапазоны бит, которые должны быть объединены для формирования поля.

Спасибо.

ответ

2

Неверные значения «Смещение».

«ContainerSize: 32» означает, что вы должны просмотреть инструкцию как однозначное 32-битное значение. В качестве 32-битного значения он будет записан как 00000C60. Четыре байта, в порядке, 60, 0C, 00 и 00. Биты следующие:

31302928272625242322212019181716151413121110 9 8 7 6 5 4 3 2 1 0 
a a a a a a a a a a a a a a a a 0 0 0 0 s s s s 0 1 1 0 a a a a 
+0

Ответ выглядит потрясающе.Я действительно думаю, что вы просто решили это, но есть кое-что, о чем я беспокоюсь. Википедия говорит, что это * Построено вокруг 16-битного процессора *. Имеет ли значение при чтении 32 байта? Это все еще читает это так? – UDKOX

+0

Перемещение только описывает, как поля выкладываются в памяти. Это не имеет никакого отношения к тому, как CPU читает и выполняет их. –

+0

Я проверяю его на работе и вернусь. Если это так, я пойму, как отметить свой ответ, как принято! Данке! – UDKOX