使用 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,但是为了利用漏洞,检查特定实现在特定条件下的作用可能很有用。
char c[10];
int value = 1;
为什么在输入 12 个字符之前值变为 0?为什么 12 不是 10 或 11? (我知道终结者以及它如何推送到下一个内存space)
给定类型的对象通常放置在对象大小的倍数的内存位置,即对象对齐到与其大小匹配的边界。
int
的大小通常为 4 个字节。如果 c
在内存中放在 value
之前,并且如果 c
从 4 字节偏移量开始,那么它们之间将有两个字节的填充。这可以解释为什么 value
不会被覆盖,除非超过 12 个字节或更多字节被写入 c
.
另请注意,就 C 标准而言,这就是全部 undefined behavior,但是为了利用漏洞,检查特定实现在特定条件下的作用可能很有用。