使用 Int 的缓冲区溢出攻击

Buffer Overflow Attack with Int

char c[10];
int value = 1;

为什么在输入 12 个字符之前值变为 0?为什么 12 不是 10 或 11? (我知道终结者以及它如何推送到下一个内存space)

给定类型的对象通常放置在对象大小的倍数的内存位置,即对象对齐到与其大小匹配的边界。

int 的大小通常为 4 个字节。如果 c 在内存中放在 value 之前,并且如果 c 从 4 字节偏移量开始,那么它们之间将有两个字节的填充。这可以解释为什么 value 不会被覆盖,除非超过 12 个字节或更多字节被写入 c.

另请注意,就 C 标准而言,这就是全部 undefined behavior,但是为了利用漏洞,检查特定实现在特定条件下的作用可能很有用。