使用mmap()映射.elf文件后输出与objdump不符的问题求助
ELF文件内存映射后打印内容与objdump输出不一致问题
我正在解析ELF文件以修改部分细节,通过open()打开文件后使用mmap()创建内存映射方便编辑,但映射后出现异常行为。为调试open()和mmap()的使用是否正确,我精简了代码,仅保留打印ELF文件内容的功能,却发现打印结果与objdump -s myfile.elf的输出完全不一致。
注意:以下是调试用的精简代码,目前无法正常工作,我的需求是实现与objdump命令输出一致的文件内容打印功能。
精简代码
#include <sys/stat.h> #include <stdio.h> #include <fcntl.h> #include <string.h> #include <sys/mman.h> typedef struct iFi { unsigned char *pB; // memory mapped file void *hFmap; void *hFile; int handle_File; unsigned long fSize; // file size struct stat sts; /* File status */ char szFN[1024]; // file name } XFILE; int main (int argc, char **argv) { if(argc != 2) return 1; XFILE myfile; XFILE *pF = &myfile; memset (&pF->pB, 0, sizeof (pF->pB)); memset (&pF->hFmap, 0, sizeof (pF->hFmap)); memset (&pF->hFile, 0, sizeof (pF->hFile)); memset (&pF->szFN, 0, sizeof (pF->szFN)); strcpy (pF->szFN, argv[1]); mode_t perms = S_IRUSR | S_IWUSR; pF->handle_File = open(pF->szFN, O_RDWR, perms); if (pF->handle_File < 0) { perror("open"); return (1); } int n = stat (pF->szFN, &pF->sts); if (n != 0) return(1000); // failed pF->fSize = pF->sts.st_size; //pF->hFmap = CreateFileMapping (pF->hFile, NULL, PAGE_READWRITE /*PAGE_WRITECOPY*/, 0, 0, NULL); pF->pB = static_cast<unsigned char*>(mmap(NULL, pF->fSize, PROT_READ | PROT_WRITE, MAP_SHARED, pF->handle_File, 0)); if (pF->pB == NULL) return 1000; // can't map view of file printf("Contents of file = 0x%x\n", *pF->pB); return 0; }
预期输出(前0xFF字节)
0000 00000320 9d050000 c9050000 cd050000 ... ............ 0010 c5050000 c5050000 c5050000 00000000 ................
实际输出
Contents of file = 0x7f
补充说明
我确认目标文件中并不存在0x7f,即使尝试打印整个pF->pB指向的内容,得到的结果为:
0x0000000100288000 "\U0000007fELF\U00000001\U00000001\U00000001"
内容的提问来源于stack exchange,提问作者Omar Khouly
相关产品推荐
相关产品推荐

