入门浅试记录一下,文档还没看完
安装
下载压缩包解压到一个位置
export PATH=$PATH:<codeql_path>
建立XNU database
cd 进xnu源码的存放位置
codeql database create xnu-database --language=cpp --command="make SDKROOT=macosx ARCH_CONFIGS=X86_64 KERNEL_CONFIGS=RELEASE"
查询测试
首先建立一个CodeQL package
codeql pack init xnuql -e cpp
然后添加cpp-all
cd xnuql
codeql pack add codeql/cpp-all
在package里新建一个ql文件,配合vscode的CodeQL插件就可以简单进行查询,来进行一点简单的测试先,参考这篇文章
可以查询到
sopt.sopt_dir = SOPT_GET;
sopt.sopt_level = uap->level;
sopt.sopt_name = uap->name;
sopt.sopt_val = uap->val;
sopt.sopt_valsize = (size_t)valsize; /* checked non-negative above */
sopt.sopt_p = p;
if (so == NULL) {
error = EBADF;
goto out;
}
#if CONFIG_MACF_SOCKET_SUBSET
if ((error = mac_socket_check_getsockopt(kauth_cred_get(), so,
&sopt)) != 0) {
goto out;
}
#endif /* MAC_SOCKET_SUBSET */
error = sogetoptlock((struct socket *)so, &sopt, 1); /* will lock */
if (error == 0) {
valsize = (socklen_t)sopt.sopt_valsize;
error = copyout((caddr_t)&valsize, uap->avalsize,
sizeof(valsize));
}
在sogetoptlock()
有一条路径即使错误也不会设置错误返回值,然而copyout()
的第三个参数实际上是个sizeof
,事实上查看查询结果,有很多误报sizeof
的结果,可能是由于AST里还是有sizeof(arg)
在的原因吧。