
# 如何分析二进制成分分析的安全编译选项类问题
成分分析会检查用户包中的C/C++、Go文件在构建编译过程中是否添加了保护性的编译选项，来保护文件运行时免受到攻击者的攻击。
安全编译选项类问题分析指导：
1. 导出Excel报告，查看安全编译选项Sheet页。
2. 根据filepath列寻找目标文件在扫描包中位置，确认文件来源。
3. 查看目标文件对应的安全编译选项结果。
   - 如果对应项结果底色为绿色或结果值为"YES"或"NA"（rpath项禁选结果值为"No"或"NA"），则说明目标文件满足安全编译选项要求，无需处理。
   
   - 对于不满足要求的项，排查目标文件的构建脚本，添加对应的编译选项，其中Ftrapv和FS两项由于可能影响性能，请根据实际情况确认是否添加对应选项。
    
表1安全编译选项检查项参考说明 
| **检查项**          | **检查项描述**               | **安全编译选项参数**                                   |
|:---|:---|:---|
| BIND_NOW         | 立即绑定                    | -Wl、-z、now                                     |
| NX               | 堆栈不可执行                  | -WI、-z、noexecstack                             |
| PIC              | 地址无关                    | -fPIC                                          |
| PIE              | 随机化                     | -fPIE或-pie                                     |
| RELRO            | GOT表保护                  | -WI、-z、relro                                   |
| SP               | 栈保护                     | -fstack-protector-strong或-fstack-protector-all |
| NO Rpath/Runpath | 动态库搜索路径（禁选）             | 脚本中删除--rpath                                   |
| FS               | Fortify Source（缓冲区溢出检查） | -D_FORTIFY_SOURCE=2                            |
| Ftrapv           | 整数溢出检查                  | -ftrapv                                        |
| Strip            | 删除符号表                   | -s                                             |
   
