我在C中使用elf.h并且我需要ELF64_Shdr *sh
来获取偏移量。我是这样的:
unsigned char offset = sh->sh_offset;
printf("Offset: %x\n",offset);
但是当我知道实际上是6c0的值时(从elf命令行工具获得),这会打印“Offset:c0”。奇怪的是,如果我这样做:
printf("Offset: %x\n",sh->sh_offset);
它打印“Offset:5c0”,它更接近但仍然不太正确。谁能告诉我我做错了什么?在此先感谢您的帮助!
答案 0 :(得分:0)
unsigned char offset = sh->sh_offset;
这是你的问题就在那里。您正在将类型为Elf64_Off
的64位实体截断为8位。不要 !
如果需要保存偏移量,请将其保存在适当类型的变量中:
Elf64_Off offset = sh->sh_offset;
要打印它,请使用%lx
格式说明符。