我有Linux内核并尝试使用objcopy工具生成ELF Header, 以下是第一步
objcopy -I binary -B i386 -O elf32-i386 --rename-section .data=.text linux_kernel.bin main.o
在此之后我想使用readelf -s main.o读取符号表,但得到奇怪的符号,下面是输出
Symbol table '.symtab' contains 5 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 SECTION LOCAL DEFAULT 1
2: 00000000 0 NOTYPE GLOBAL DEFAULT 1 _binary_linux_kernel_bin_
3: 004df650 0 NOTYPE GLOBAL DEFAULT 1 _binary_linux_kernel_bin_
4: 004df650 0 NOTYPE GLOBAL DEFAULT ABS _binary_linux_kernel_bin_
现在应该可以看到像
这样的符号_binary_linux_kernel_bin_start
_binary_linux_kernel_bin__end
_binary_linux_kernel_bin_size
任何人都可以让我知道我做错了吗?还是期待一个?
为什么我想看到正确的符号,因为必须做类似下面的事情
--entry_point=_binary_linux_kernel_bin_start
答案 0 :(得分:9)
您可以使用readelf -W -s main.o
命令,-W
告诉readelf
不要将输出截断为80个字符的宽度。
答案 1 :(得分:2)
只是字符串太长而readelf
正在截断。试试objdump -x main.o
。