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

How to dump raw memory into a struct fast?

我在身份映射内存上下文中(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 实例的最佳方法是什么?有没有一种方法可以做到这一点而不用循环遍历内存(这看起来很无聊)?


EDIT:Nicolas Jean 建议使用 memcpy,但不幸的是,在 EFI 开发上下文中,使用 C 标准库毫无意义。但是,gnu-efi 中的 efilib.h 具有执行相同任务的 CopyMem(IN VOID * dst, IN CONST VOID * src, IN UINTN len)

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

用memcpy复制内存内容大概就是你要找的

mystr mystr_instance;
memcpy(&mystr_instance, mem_ptr, sizeof(mystr_instance));

正如您正确识别的那样,memcpy 在 UEFI 环境中并不真正存在,但 CopyMem 如果用于编译到固件映像中的东西,效果很好。

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