我想找出为什么strncpy被认为是不安全的.有没有人有关于此的任何文档或使用它的漏洞利用示例?
请考虑以下代码.
int main(void) {
char * test = "abcdefghijklmnopqrstuvwxyz";
test[5] = 'x';
printf("%s\n", test);
return EXIT_SUCCESS;
}
在我看来,这应该打印abcdexghij.但是,它只是终止而不打印任何东西.
int main(void) {
char * test = "abcdefghijklmnopqrstuvwxyz";
printf("%s\n", test);
return EXIT_SUCCESS;
}
然而,这工作得很好,所以我误解了操纵C字符串或其他东西的概念吗?如果它很重要,我正在运行Mac OS X 10.6,它是我正在编译的32位二进制文件.
请考虑以下代码:
int main() {
char *p = "abcd";
p[0] = 'x';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是否可以通过标准保证在任何环境中工作?
我担心一些编译器决定将字符串存储的内存标记为只读,并尝试修改它会在运行时生成分段错误.但是,在我测试过的所有环境中,它都有效.