公开学习文档

公开学习文档


checklist

<h2>基础</h2> <p>1、两个无符号数相减为负数时,结果应当为一个很大的无符号数,但是小于int的无符号数在运算时可能会有预期外的隐式符号转换。</p> <p>2、数字前面不能加 0,可能会变成八进制值,如 0777</p> <p>3、创建文件注意权限</p> <p>4、位操作不能针对有符号数,位操作符(~、&gt;&gt;、&lt;&lt;、&amp;、^、|)应该只用于无符号整型操作数</p> <p>5、输入性参数,如读取文件等,要考虑参数可能为非法,或者可能为空。测试时需要修改配置文件,使其非法,验证是否可以正常处理</p> <p>6、禁止将用户输入串拼接到任何格式字符串内,避免字符格式化漏洞</p> <p>7、switch中应有default</p> <p>8、注意字符串操作函数,尽量使用安全版本</p> <p>9、安全函数:memcpy_s, strcpy_s, strcat_s, sprintf_s, strncpy_s, sscanf_s, strlen_s, sprintf_s</p> <p>10、申请静态数组的时候,大小不超过0x1000,程序在运行期间,函数内的局部变量保存在栈中,栈的大小是有限的,栈空间不够,程序发生栈溢出异常</p> <p>11、readlink() 函数不以 &quot;\0&quot; 终止其输出</p> <p>12、传递给 realpath() 的缓冲区应该至少为 PATH_MAX 字节</p> <p>13、当缓冲区过小时,调用 getwd() 会导致 buffer overflow</p> <p>14、禁止在信号处理例程中调用非异步安全函数,如 printf</p> <p>15、检查复制粘贴的重复代码(相同代码通常代表错误)</p> <p>16、rand类函数的随机性并不高。而且在使用前需要使用srand()来初始化。</p> <p>17、子进程会复用父进程的句柄,导致句柄超限(tocheck)。也就是说:自已重启自己这个场景,需要注意</p> <p>18、全局变量尽量加 static 控制生效域;另外,要在定义的时候进行初始化,避免成为弱符号,产生意想不到的结果</p> <p>19、如果进程依赖 0-3 号句柄(即标准输入输出句柄)时,注意拉起进程的方式,可能影响其输出,因为是从父进程继承的句柄,无法预期。建议考虑 daemon 参数设置。</p> <p>20、涉及马甲传参时:要注意分号的影响,会分成多条命令</p> <p>21、充分自测,不能想当然;c 程序要用 valgrind 检测</p> <p>22、调试标记不用太特殊,不利于传播(例如 _flag 这种,别人不一定能注意到前面的下划线)</p> <h2>多线程</h2> <p>1、同一变量需要用原子变量</p> <p>2、</p>

页面列表

ITEM_HTML