我在身份映射的内存上下文(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
执行相同的任务。
答案 0 :(得分:2)
使用memcpy复制内存内容可能就是您要找的。
mystr mystr_instance;
memcpy(&mystr_instance, mem_ptr, sizeof(mystr_instance));
答案 1 :(得分:2)
正如您已正确识别的那样,UEFI环境中并不存在memcpy,但如果用于编译到固件映像中的内容,则CopyMem可以正常工作。
对于驱动程序或应用程序,最好使用gBS-> CopyMem()启动服务。
答案 2 :(得分:1)
假设内存格式正确,您可以将指针强制转换为地址或将数据存储到结构中