用缓冲区溢出修改整数

时间:2018-09-28 04:26:58

标签: integer buffer-overflow

我正在尝试使用缓冲区溢出修改结构中的整数,但是我无法弄清楚该整数以什么格式存储。

我做了一些测试代码:

    struct {
    char beginningWord[3];
    int32_t middleInt;
    char endingWord[3];
} testStruct;

testStruct.middleInt = 5;
strcpy(testStruct.endingWord, "123");
strcpy(testStruct.beginningWord, "AAAA0000FFF");

这会将endingWord从“ 123”更改为“ FFF”,将整数从5更改为808464432。例如,我应该使用什么覆盖整数存储插槽并将其更改为9?

1 个答案:

答案 0 :(得分:1)

strcpy无法可靠地复制右宽度的

9(32位)。看起来像是十六进制:

00000009

通常,它将以这种方式存储在内存中(称为Little Endian)

09 00 00 00

这不是由字符“ 0”和“ 9”组成的字符串,它是四个字节,值分别为9和0。

09和第一个00可以被strcpy复制,但是strcpy停止,因为00表示字符串的结尾。因此,不会写入整数的两个字节(和endingWord)并保留其先前的值。如果高字节开始不为零,则结果值将不是9。 memcpy可以可靠地复制此类数据,包括“非最终”零。

作为字符,09在ASCII编码中将解释为(或写为)\t(制表符)。