文章目录
简介
之前遇到过这么一类情况:所创作的软件涉及数据库数据加载。这样就形成一种需要两者版本一致的情况;也就是说,如果软件所定义的容纳数据库表结构的结构体或者类定义的版本,一定要和数据表的结构一致。
当然这里有一个前提条件,是为了性能考虑,在将表记录赋值到结构体或者类时,使用了memcpy。没有对数据是否合法做出判断。
这种Coredump,属于软件设计导致问题的一种类型。
举例
比如:
struct A{
int B;
char C[13];
double D;
}
数据库表的结构也是一个32位 int,13个bytes字符串,一个32位double类型。在整体复制是,其实很容易就映射过去。
出现coredump的情况
假如数据库表结构变了,C这个字段的数组扩充了10个bytes,变成23个btyes容量;那么数据结构A需要做相同的扩充。
如果不一致,就很有可能导致内存访问越界的问题。