Dan*_*ien 10 c security macos objective-c memset
是否有一个等同于RtlSecureZeroMemory/ 的Mac OS X SecureZeroMemory,一个将一块内存归零的函数,但编译器不会优化调用?
oua*_*uah 14
编写自己的函数:
void secure_zero(void *s, size_t n)
{
volatile char *p = s;
while (n--) *p++ = 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:评论中的问题,为什么不memset呢?的memset函数调用可通过编译器,如果数组对象没有futher访问被优化掉.
请注意,C11添加了(可选)功能memset_s,标准保证函数调用无法优化:
(C11,K.3.7.4.1p4)"[...]与memset不同,任何对memset_s函数的调用都应严格按照(5.1.2.3)中描述的抽象机的规则进行评估.对memset_s函数的调用应假定s和n指示的内存在将来可以访问,因此必须包含c所指示的值.