0,数据被改写时我们需要怎么定位,我们首先需要确认数据是逻辑上被改写还是踩内存被改写的。
1,当数据被踩时,也就是出现数据异常时,并且可以稳定复现时,我们确认时踩固定内存时,我们可以使用魔术字定位问题。
代码举例查看确认。
#include <stdio.h>
#include <string.h>
#define MAGIC_BYTE 0xAA // 定义魔术字(单字节)
typedef struct {
uint8_t magic_front; // 前魔术字(1字节)
int id; // 结构体内容
char name[32]; // 结构体内容
uint8_t magic_back; // 后魔术字(1字节)
} SafeStruct;
// 初始化结构体,设置前后魔术字
void init_struct(SafeStruct *s, int id, const char *name) {
s->magic_front = MAGIC_BYTE;
s->id = id;
strncpy(s->name, name, sizeof(s->name) - 1);