我有一个以结构开头的文件(由*数据指向)。
我想在内存中找到nsectionheaders的值,以便我可以使用它。
我试过这个,但它返回了一个奇怪的大负值。如何让它返回正确的值?
void read_file_header(void *data) {
int offset = (sizeof(char) * 16) + (sizeof(int) * 4) + sizeof(int) + (sizeof(short) * 6);
char *pointer = (char *) data + offset;
short num_sec_headers = 0;
memcpy(&num_sec_headers, &pointer, sizeof(short));
printf("The number of headers is %d\n", num_sec_headers);
}
答案 0 :(得分:2)
该行
memcpy(&num_sec_headers, &pointer, sizeof(short));
不正确。您正在获取指针的地址,而不是仅使用指针:
memcpy(&num_sec_headers, pointer, sizeof(short));
答案 1 :(得分:1)
标准中包含安全offsetof
(包括stddef.h
):
void read_file_header(void *data) {
int offset = offsetof(ElfFileHeader, nsectionheaders);
short num_sec_headers;
memcpy(&num_sec_headers, (char *)data + offset, sizeof(short));
printf("The number of headers is %d\n", num_sec_headers);
}