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



我处于身份映射的内存上下文(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复制内存内容可能是您正在寻找的。

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

正如您已经正确识别的那样,memcpy在UEFI环境中并不真正存在,但是CopyMem如果用于编译到固件映像中的某些内容,则工作良好。

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

假设内存的格式是正确的,您可以强制转换指向地址的指针,或者将数据memcpy放入结构体

相关内容

  • 没有找到相关文章

最新更新