我正在使用 objcopy 将 elf 转换为十六进制。当我在 IDA Pro 中拆卸精灵时,所有部分都存在,但它们在我的十六进制中丢失了,似乎精灵标题:
C:\TricoreGCC>tricore-readelf -l test1.elf
Elf file type is EXEC (Executable file)
Entry point 0x80132000
There are 3 program headers, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000000 0x80130000 0x80130000 0x023e8 0x023e8 R E 0x4000
LOAD 0x003000 0x801cb000 0x801cb000 0x01478 0x01478 RW 0x4000
LOAD 0x005500 0xd0015500 0xd0015500 0x00000 0x00008 RW 0x4000
Section to Segment mapping:
Segment Sections...
00 .text .rodata
01 .data
02 .bss
在汇编程序文件中,我有这个:
.section .jfuel , "x"
j translatefuel
在链接器脚本文件中,我有这个:
SECTIONS
{
. = 0x800B5964;
.jfuel : { *(.jfuel) }
. = 0x80132000;
.text : { *(.text) }
.rodata : { *(.rodata) }
. = 0x801CB000;
.data : { *(.data) }
. = 0xD0015500;
.bss : { *(.bss) }
}
elf 文件确实包含来自本节的符号:
Symbol table '.symtab' contains 85 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 800b5964 0 SECTION LOCAL DEFAULT 1...
后来有我的 .text 部分:
5: 80132000 0 SECTION LOCAL DEFAULT 5...
不知何故,我没有在链接描述文件中正确定义该部分。因为它没有像 .text 这样的传统名称,我错过了阻止它进入部分以“加载”到小精灵和十六进制的东西,尽管 IDA Pro 加载小精灵显示了正确放置的部分,及其内容。
在 RE 中发帖是因为我正在使用 C 和 asm 的组合修补二进制文件。
谢谢!