整数溢出

整数溢出可能会间接导致栈溢出和堆溢出

溢出

只有有符号数才会发生溢出,有符号数的最高位表示符号,当两个正数或者两个负数相加时,可能会改变符号位的值,导致溢出,溢出标志OF可以检测有符号数的溢出

回绕

无符号数0-1会变成最大的数,最大的数+1会变成0,进位标志OF可以检测无符号数的回绕

截断

将一个较大宽度的数存入到较小宽度的数中,会发生截断,保留后面几位,有可能会损失数值或者是符号

常发生漏洞的函数

size_t

是无符号整数类型的sizeof()的结果

memcpy()

void memcpy(void dest, const void *src, size_t n);

将src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回dest

strncpy()

char strncpy(char dest, const char *src, size_t n);

从源src中所指的内存地址的起始位置开始复制n个字节到目标dest所指的内存地址的起始位置中