专栏名称: 看雪学苑
致力于移动与安全研究的开发者社区,看雪学院(kanxue.com)官方微信公众帐号。
今天看啥  ›  专栏  ›  看雪学苑

从Clang到Pass加载与执行的流程

看雪学苑  · 公众号  · 互联网安全  · 2024-06-24 17:59
一gdb动调clang文章开始之前,先通过gd动调clang来看一看整个过程是什么样的。开始调试:gdb clang我这里调试的是release版本的clang(不想再编译了),显然提示了找不到clang的调试符号。我建议使用debug版的clang来调试,不然就看不到断点处的源码了,这对调试还是有影响的(有些函数下不了断点,不知道是不是这个原因)。直接把断点下在main函数处gdb main重要的来了!clang在执行过程中,会fork子进程,如果直接进行跟踪会出现如下结果:因此我们需要通过如下指令在gdb中设置跟踪子进程:set follow-fork-mode child然后启动clang并运行我们的Pass,指令如下:run -mllvm -mypass ~/Desktop/test.cpp -o ~/Desktop/test_debug_clang.ll此时我们还需要对自己的Pass下断点:b MyPass::runOnFunction继续运行直到命中我们下的Pass断点。成功断在了预期位置处,此时我们查看函数调用堆栈,指令 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照