我正在读书这个问题 https://stackoverflow.com/questions/21217126/memcpy-implementation-strict-aliasing以及提到的评论之一基于 C 有符号整数的攻击.
我知道什么是int
溢出是,但我不明白这怎么用attack一个程序。
到底是什么意思攻击程序?如果您知道该程序有此错误,您该如何使用它?
这是否仅限于signed int
.
如果是的话为什么?
C++ 中的情况又如何?
如果问题很微不足道,我很抱歉
例如,FreeBSD 的 getpeername 函数中存在一个错误。
为了说明这一点,我们用一个函数void copyFromKernel(char* dest, int size)
从受限内存区域复制size
bytes.
您可能已经知道,memcpy 函数的声明如下:
void * memcpy ( void * destination, const void * source, size_t num );
其中 size_t 是无符号类型。如果在我们的函数中,我们做了类似的事情:
void copy_from_kernel(void *user_dest, int maxlen) {
int len = KSIZE < maxlen ? KSIZE : maxlen;
memcpy(user_dest, kbuf, len);
}
,其中 KSIZE 是我们允许用户复制的最大字节数。如果调用者发送 maxlen 的正值,则该函数将按预期工作。但如果调用者发送 maxlen 的负值,则比较将通过,并且 memcpy 的第三个参数将是该负值。当它被转换为无符号时,复制的字节数将会很大,因此调用者可能会得到受限的数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)