如何快速将原始内存转储到结构中?
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() 引导服务。
我在身份映射内存上下文中(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() 引导服务。