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

时间:2016-09-09 08:57:01

标签: c memory uefi gnu-efi

我在身份映射的内存上下文(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的{​​{1}} gnu-efi 执行相同的任务。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

正如您已正确识别的那样,UEFI环境中并不存在memcpy,但如果用于编译到固件映像中的内容,则CopyMem可以正常工作。

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

答案 2 :(得分:1)

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