GNU objcopy:精灵到十六进制缺失部分

逆向工程 小精灵 部分
2021-06-30 07:07:10

我正在使用 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 的组合修补二进制文件。

谢谢!

1个回答

在这种情况下,@Igor Skochinsky 提示后的答案是:

改变:

.section .jfuel , "x"
j translatefuel

到:

.section .jfuel , "ax"
j translatefuel

.text 默认有 AX (alloc, execute) 而 .jfuel 只有 X 因为这是我最初添加的所有内容。