2025年的上半年,我竟然一条朋友圈也没发,一条博客也没写,不知不觉地就度过了博士的第二个学期。很多时候不想发是因为忙,也有一些时候是确实没有了和远程好友们分享生活的欲望。但不管怎么说,写给自己的总结还是很有必要的。 2025年的下半年,时间过得更快了。本来计划的半年总结拖到了年底,是时候得改改这个P人的习惯了。
Research
先讲讲research,毕竟我是个full-time PhD.
Synergetic Disassembly
从去年寒假开始前,学长就和我说过要做Neural Disassembly的一个Idea。一开始我是非常乐意的,一方面是终于有人可以指导科研项目,另一方面我也希望自己能够从底层了解Binary Lifting的过程,宏观地思考构建Reliable Binary Lifter的各方面挑战。
我先是从组内项目的代码阅读做起。Disassembly作为二进制分析的基石,其实已经发展出许多principal的算法,也包括一些ad-hoc的heuristics。大多数实用的disassembler,包括我们的plankton,都会融合以上两者到整体设计中,以至于不存在一个标杆式的论文作为参考。由于我没有明确的目标,所以只能漫无目的,沉迷于细节地看,导致经常卡在无法理解某些数据结构的设计上。其实从后续的经验看来只要抓住以recursive为主,辅以linear scan作为补充的思路,就能搞懂整体的流程,就能上手去debug,自然就看懂了。
代码看得似懂非懂,导致论文也看得似懂非懂,以至于无法理解学长的Idea。开学以后的各项事物,也打乱了我对于一个新领域的思考,哪怕是有一些insight,也不过是“拍脑袋”。终于是等到了4月,才想起来自己之前注册的组会slot,然后开始找学长不断讨论,打磨Idea。虽然最后成型的Idea和最开始简直可以说毫不相关,但也能看得到一步步变化的轨迹。
有了Idea后本应该趁着假期着手实现,并积极投稿。但是由于agent风潮的冲击,以及导师安排的其他任务,我一直没有踏实地去实现。顶多就是9月初抽空复现了一篇经典论文(Nucleus Euro S&P ‘17)的代码,但距离把Idea变成research prototype还差的很远。好在我一直关注这个领域的文章,尤其是25年在安全顶会上“返祖”式地出现了一批disassembly的论文,我还能理解Idea的逻辑。
由于这是自己独立主导的工作,没有外部的push,我都把它的优先级排得很低,以至于有时候直接把时间压缩没了。而在对待其他任务时,又提不起动力,让charles评价我为“例行公事”。在charles提醒我“要有自己的东西”之后,我才意识到自己没有好好珍惜这个Idea。又结合麻老师说过的,“趁着PhD期间就应该多做些自己想做的,以后能选择做科研的机会就不多了”,我更应该努力争取在科研上“做自己”的机会。
Benchmarking Binary Lifter
这是导师安排的任务,最开始的目标也很简单,就是了解我们的Plankton和IDA Pro,Ghidra,Angr这些鼎鼎大名的工具还有多少差距。但毕竟要投入许多精力,我还是想把它包装成一个research问题。我先后从verification,testing还有study的角度调研了考察lifter质量的文章,自己也构建了一套基本的benchmark的框架,但一直拿不定主意要从哪个角度入手。
说到底还是因为自己对于lifting的全流程,以及lifter以static analysis为下游应用时最重要的性质是什么。要测试lifter质量,首先要选好semantic-level,其次是要来衡量lifted code与ground truth的等价性。虽然这本质上是undecidable的,也是PL的核心问题之一,但我们也可以通过选取好的specification来获得足够的guarantee。就像zhendong在OOPSLA ‘25上提到的keynote一样,从testing的角度出发,总能发现很多有趣的性质。
趁着PQE的机会,我也在梳理Plankton的代码,希望能找到一些足够独特的角度来看待binary lifting。面对导师的push,也要尽量及时地拿出阶段性的结果。
Agentic Binary Analysis
这是今年最猝不及防,但又好像提前提前约定的事情。其实LLM从22年底开始兴起,到23年就有了Agent(ReAct)的概念。但一直到25年3月,随着MCP协议的火爆,Agent才影响到我们这样依赖传统静态分析生存的research group。AI的影响力就像洪水猛兽,不管是为了金钱,发paper,攒影响力,它能够诱惑你入坑。我先是尝试了当时最流行的Ghidra MCP,本地部署了一些专有化模型(LLM Compiler, CC ‘25),然后也尝试封装了LLM query的API到组里的静态分析工具,探索了多模型使用的Best Practice。但以上的尝试前其实都并没有回答“为什么要实用Agent”的问题,也就是说我并没有从research的角度思考,从而都是浅尝辄止。
本来并没有想投入太多精力,对于Agent上的工作,我的预期就是能够做一个短平快的work去参加CCS SURE ‘25或者OOPSLA LMPL ‘25,完成每年的参会KPI。所以Idea很简单,就是直接把clearblue的几个主要功能给封装成tool。但到了6月,随着组里有学长开始投入重心做Agent,我决定先用一个月的时间来做一个prototype。第一版的实现是很快的,也顺利完成了workshop的投稿。虽然我看到了CCS ‘25一篇类似的文章,我内心第一次感觉到了做Agent的紧迫感,却没想到这样的焦虑会伴随整个25年下半年。许多的bug detection,binary analysis agent都不断冒出来,就像某位新AP说的,那些活跃的,做binary的,有成熟代码的强组,怎么可能不尝试呢?反过来思考,我们组也有一些自己擅长的东西,这也应当是我做Agent的护城河。
其实我几乎是在没有做选择的情况下,就答应了在组里自己fork的Agent框架上做开发。在后续7-8月的开发过程中,不仅要针对Plankton做一些工程工作,对于Agent设计与实现上也花了很多精力。这其中不乏大量的debugging,让我被迫了解了Agent的构造,以及一些hidden problem(IDA Pro中数据库的设计,Re-type,Re-analysis功能的实现等)。可以说,如果只是追求短平快,没有组里环境的影响,我完全可以直接使用最流行的Agent框架和最成熟的二进制逆向工具,直接以结果为导向去快速迭代。
选择哪种路径更适合科研,我还无从下定论,但在以后的project伊始,我应当提醒自己,不要做和当前目标无关的工作。而且即使是做一个周期很长的工作,也需要不断地更新进度,给合作者(包括导师)让你做下去的信心和继续投资的动力。没有人会天然的相信你一下子就能搞个大新闻,尤其是在没有前期研究经历背书的情况下。如果失去了合作者的支持,自然也寸步难行。
关于这个work,我还有一些投稿上的心得。在最开始的workshop投稿完成后,自然的想法就是继续做投到会议上。当时确实也有一些2-3月的Deadline,适合投稿短平快的工作。但学长坚持投稿到S&P这样的顶中顶会议,我也没有足够的经验和足够的实验去估计中稿几率。反而是设定了这个目标以后,因为距离截稿还有100多天,我变得有点拖沓,并没有规划好进度,导致最后实验远远不够,写作也很仓促。且不管是哪种风格的投稿,我都应该做好投稿规划。也不要总是定时间太长远的Deadline,不然会在工作后期感到动力不足,要适当地push自己,将每个工作尽早进入rolling的状态。
Misc
伴随着Research的进行,我还有一些值得记录的practice。
在S&P的投稿中,我第一次尝试“带学生”。9-12月,我负责了带组里临时安排过来的实习生。在这个过程中,我学会了划分职责,比如某位新AP说的:一个人写程序分析,一个人写Agent,一个人做漏洞挖掘。我适当地下放了一些labour work,但也保留了自己看实验结果的环节。其实我还意识到research motivation对于评价新人科研潜力的重要性,也希望自己能够继续保持。
从去年底开始我就开始不断参与artifact review的工作,今年更是有点收不住的架势,一共参加了8次,10+个artifact的审稿,涉及Security,PL,SE,System各个领域的顶会。随着workload越来越大,我愈发感觉参与这样的service对我的收益是不大的。一方面,也就是能够提早1-2月看到论文。另一方面,很多artifact的质量也非常一般。当然我还是非常支持artifact的模式,我相信自己也积攒够了artifact的经验,所以我以后每年能保持1-2个service就行。
TA
今年做了一整年的TA,也是非常丰富。
COMP 3021, the “Java TA”
为了做这门课的TA,我设计了包括lab *11,project *3,lecture *1,final exam *1在内的各种course work。事后统计,我作为TA的workload几乎是普通TA的20-30倍。从收益来看,自学Java让我了解了软件工程设计的思想,设计project(2kLoc+)锻炼了我的代码能力,给lecture和设计final exam更是难得的TA经历。
Firebird CTF Coach
在Yu3H0的邀请下,终于在PhD入学一年之后我当上了CTF coach。一开始本来是抱着waive TA的心态,但在为了准备10月初的Pwn tutorial以及12月的CTF competition出题,我也着实花了不少时间,甚至影响了research。既然要长期做下去,就还是要把握好CTF对于我的作用:增加安全研究的基本功,但不追求比赛成绩。
WLB
Exercising
今年上半年的运动我保持得很不错,在每个月40km的跑量下,我逐渐从80kg减到了74kg,VO2max也恢复到了40,完成了自己在硕士毕业时定下的减肥目标。但从暑假开始,因为一直被3个研究项目困在学校,平常连锻炼的时间都没安排出来,导致运动习惯也逐渐丢掉了,作息也不断变差,体重一度又回到了78kg。
有一段时间,即使到了周末,我也是在床上躺着,既不想工作,也不想运动。久卧伤气,这种状态是非常不好的。好在我还是保留了基本的每周运动一次,以及每天至少走5k步的底线,但想要把体能恢复到之前的水平,还需要长期坚持。
Travel
出于旅游的目的,不包括每月一次的去深圳改善生活,我上半年去了三个地方。2月份去广州探亲;4月去衡阳叙旧;6月去澳门。下半年则只有10月去新加坡参会。其实旅游主要是为了放松心态,一直在科大的山上待着总感觉会积攒焦虑情绪,好像在那么偏远的地方就没必要做除了学习以外的事儿。其实我去过的香港附近的海岛,徒步路线还很少,而通勤成本也没有想象的那么高,之后的旅游计划可以更多偏向大湾区,偏向周末散心。
Marriage
25年做成的一件大事就是领完结婚证。手续上可能就是10分钟的功夫,但前前后后也花了1个月去准备。要谢谢爸妈还有老婆的支持,领证的过程还是很顺利的。美中不足的就是跟拍有点潦草,计划26年去旅拍一次弥补遗憾。领证后收到的印象最深刻的评论就是“好好工作,要养家了”,我认为是非常贴切的。
Conclusion
同时进行3个研究项目,我从后半年以来逐渐变得焦虑和乏力。想想那些同时主持多个课题的青椒,更加感慨自己在long-term的multi-tasking上的表现还离一个成熟的研究人员有很远的距离。不过值得高兴的是随着S&P ‘26的投稿,我的博士生活也逐渐进入了“一篇在做,一篇在写,一篇在投”理想状态,怎么快速地学会分清任务主次,并同时保持focus到每一件正在做的事情,会是我整个博士二年级的课题。
我也给26年定几个大目标:一是在学长毕业前完成手头的三个工作并进入rolling状态,二是能够参与一次PLDI的投稿,三是能开启一些校外的合作研究项目。其他的小目标还包括参与更多顶会审稿,积累企业实习经验。