我在一个身份映射内存上下文中( 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建议使用memcpy,但不幸的是,在EFI开发环境中,使用C标准库没有什么意义。然而,来自CopyMem(IN VOID * dst, IN CONST VOID * src, IN UINTN len)的efilib.h拥有执行相同任务的gnu-efi。
发布于 2016-09-09 09:16:26
使用memcpy复制内存内容可能就是您要寻找的内容。
mystr mystr_instance;
memcpy(&mystr_instance, mem_ptr, sizeof(mystr_instance));发布于 2016-09-09 23:18:47
正如您正确识别的那样,memcpy实际上并不存在于UEFI环境中,但是如果用于编译到固件映像中的东西,CopyMem工作得很好。
对于驱动程序或应用程序,最好使用gBS->CopyMem()引导服务。
发布于 2016-09-09 09:06:10
假设内存格式正确,则可以将指向地址的指针强制转换,也可以将数据转换为结构。
https://stackoverflow.com/questions/39407644
复制相似问题