You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:35:58