我必须使用可重定位的ELF文件并使用红帽编译器(而非TI)修复MSP430-F5529中的地址。但是,我不明白如何重新安置,因为我没有使用符号。
Here是类型及其详细信息。
让我们以此为例。
以下生成了ASM:
0C60 0000 : MOVA R12, &0x00000
如果我们在Wikipedia中搜索MOVA
操作码,我们会看到操作码的结构如下:
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位) 0 - 。)
我知道需要了解如何解释[0,4]+[16,16]
。看起来[0,4]
引用前2个字节的最后4位(006 0 0000),但它是如何工作的?我该如何阅读[16,16]
?
以下是有人理解的PDF解释的引用。
使用元组[CS,O,FS]指定字段,其中CS是 容器大小,O是从容器的LSB到字段的LSB的起始偏移量, 和FS是该领域的大小。所有值均以位为单位。符号[x,y] + [z,w]表示 重定位占用不连续的位范围,应该连接起来形成字段。
感谢。
答案 0 :(得分: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