代码之家  ›  专栏  ›  技术社区  ›  pr0gma

如何快速将原始内存转储到结构中?

  •  0
  • pr0gma  · 技术社区  · 8 年前

    我处于标识映射内存上下文(x86_64平台上的UEFI)中,我想将一些连续内存内容转储到一个结构中。假设我的结构有这样的形状:

    typedef struct _mystr {
        char char_arr[7];
        uint32_t u_d;
        uint8_t u_b;
    } __attribute__((packed)) mystr;
    

    如果我参加了 mem_ptr 请求内存偏移量0的地址,将其内容复制到 mystr 例子有没有一种方法可以做到这一点,而不用循环遍历内存(这看起来很无聊)?


    编辑 :Nicolas Jean建议使用 memcpy 但不幸的是 EFI 开发上下文使用C标准库没有什么意义。然而 efilib.h 从…起 gnu-efi CopyMem(IN VOID * dst, IN CONST VOID * src, IN UINTN len) 它执行相同的任务。

    3 回复  |  直到 8 年前
        1
  •  2
  •   Nicolas Jean    8 年前

    用memcpy复制内存内容可能就是您要找的。

    mystr mystr_instance;
    memcpy(&mystr_instance, mem_ptr, sizeof(mystr_instance));
    
        2
  •  2
  •   unixsmurf    8 年前

    正如您正确识别的那样,memcpy实际上并不存在于UEFI环境中,但如果将CopyMem用于编译到固件映像中的某些内容,则它可以很好地工作。

    对于驱动程序或应用程序,最好使用gBS->CopyMem()启动服务。

        3
  •  1
  •   doron    8 年前

    假设内存的格式正确,您可以将指向地址的指针或将数据存储到结构中