c - 在源代码级别使用 GCC __builtin_object_size 有什么动机吗?
问题描述
我知道这并不新鲜,但最近我遇到了 GCC __builtin_object_size() 函数的话题。对于我从文档中读到的内容,它指出预期用途如下:
预期用途可以是例如
#undef memcpy #define bos0(dest) __builtin_object_size (dest, 0) #define memcpy(dest, src, n) \ __builtin___memcpy_chk (dest, src, n, bos0 (dest)) char *volatile p; char buf[10]; /* It is unknown what object p points to, so this is optimized into plain memcpy - no checking is possible. */ memcpy (p, "abcde", n); ... // more codes
直接在源代码级别使用它而不是在编译时启用 D_FORTIFY_SOURCE 标志有什么好处吗?现实生活中是否有从使用 __builtin_object_size() 中受益的例子?
解决方案
这个例子展示了如何_FORTIFY_SOURCE
使用memcpy
!
但是除了标准库函数之外,肯定还有其他函数可以从对象指针范围检查中受益。
推荐阅读
- api - 不明白为什么我的 Haskell API 调用脚本返回“Nothing”
- windows - 无法在 Windows cmd 上运行来自本地 npm 包(webpack、babel 等)的命令。不存在的 cygdrive/c 路径出现错误。不使用 cygwin
- php - 使用 PHPWord 库读取 word 文件时如何检测 EOF(文件结尾)字符
- python - 如何在 python 中从 pywikibot 获取重定向
- verilog - 在 Verilog 中增加一个变量以索引导线(使用循环)
- python-3.x - 如何关闭 PRAW Reddit 实例?
- reactjs - 出现在组件上方的 Material UI Select 按钮标签
- python - Python函数以挂起的程序结束
- java - Spring Batch如何使用具有其他对象列表的对象持久化到数据库中
- windows - 在 Enclave 中加载 DLL 失败并显示 ERROR_INVALID_IMAGE_HASH