Jazzer - Autofuzz 方面的代码阅读
上一篇主要围绕 jazzer 在 specified target 下的流程,着重讲了多种场景下 (experimental mutator / libfuzzer by default) mutator 的产生和使用。
这篇主要分享的是 jazzer 在 autofuzz 场景下的工作流程,期望着重讲下 autofuzz 与 specified target 在选取 target 时的不同,以及 fuzz data provider 的使用。
1. autofuzz 的 target 定义在哪里在 src/main/java/com/code_intelligence/jazzer/driver/Driver.java 文件下的 public static start 中,汇总了 autofuzz 和 specified target 两种 fuzzing 方法的启动点:
12345678910111213141516171819if (!Opt.autofuzz.get().isEmpty()) { AgentInstaller.install(Opt.hooks.g ...
Jazzer - Mutator 方面的代码阅读
好久没写过 blog 了,这篇主要分享 Jazzer 的 Mutator 设计。Jazzer 是一款 libfuzzer 套壳 fuzzer,在我看来的主要功能是提供了对 Java 的 fuzzing 能力。
1. libfuzzerLibfuzzer 允许用户自定义 LLVMFuzzerCustomMutator / LLVMFuzzerMutate。
在 src/main/native/com/code_intelligence/jazzer/driver/fuzz_target_runner.cpp 中,定义了 LLVMFuzzerCustomMutator 和 LLVMFuzzerCustomCrossOver。Mutate 和 CrossOver 都属于高中生物的概念,这里只是一个借用,大概意思也差不多。因此可以注意到 Mutate 总是对一个 uint8_t *Data 操作,而 CrossOver 需要两条 DNA:
1234567extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size, ...
Pytorch Profiler 1 & TensorFlow Profiler 2
这篇主要介绍 Pytorch 和 TensorFlow 的 Profiler 设计。二者均由 C++ 实现,因此可以利用 OO 特性以及一定的设计方法轻松实现 Profiler(如汇总 operator 的计算)。但其他 DL 框架可能由于并未如此实现而无法使用类似设计。
1. Pytorch Profiler 1基于 Event 驱动。简单来说是在 forward 前后有两个 hook。
注:autograd 中的 profiler 是第一代,profiler 下的是第二代。
1234567891011121314151617# torch/autograd/profiler_legacy.pydef __enter__(self): # ignore some code self._start_trace() return selfdef __exit__(self, exc_type, exc_val, exc_tb): # ignore some code records = _disable_profiler_legacy() parsed ...
2022-年度总结
废物 skyleaworlder 的 2022 大冒险
抽象与高阶
我自然辩证法的期末作业
对一些无聊琐事的看法
现在我已经不是本科生了,我也不是非常想在现在还和本科有太多关联——因为我个人觉得,在新阶段仍然怀恋旧阶段的事物,其实是一种当下生活并不顺利的表现。当然了,我也不想把过去完全割裂,毕竟我的很多朋友还在同济,珍贵的共同经历让我难以忘记他们,我自己也不希望这种事发生。
于是这边形成了一个矛盾:一方面是不愿再有更多联系;另一方面我不愿放弃过去曾经维系的感情(哪怕已经不在了)。看似矛盾,但又都说得通,这就是最近我对生活最深切的体会。
过去我觉得我还是可以想清楚很多事情。这些事情当中包括了一些人暂时还没有想清楚的事情。在这里我想简单记录我的几个方法论,以后的我可能会丧失这些能力,也或者是因觉得它们不好用而放弃使用它们。但不得不说,此时此刻的我向未来的我自己强烈推荐这些方法,因为它们确实很朴素,朴素到一点逻辑、哲学都没有接触过的我都能使用;确实很有效,有效到让我发现了生活中的一些小笑话。
这些小笑话并未发生在现在,而是发生在过去。那是我在同济的第三年,我非常的忧郁,因为我感到混沌。不是说前途未卜,而是看到自己一片清晰的前途通向失败。这里应用一下最近获得的方法,来解释一下当时发生的事情。具体怎么理解我 ...
xv6 Trap 过程
usertrapxv6 中 usertrap 和 kerneltrap 是两种方式。对于 syscall 时的 usertrap,流程大概是 uSys.S -> ecall -> uservec -> usertrap -> syscall -> usertrapret -> userret -> sret。 感觉 xv6 里面的 usertrap 比较奇怪。
riscv 的 ecall 只会修改 mode、保存 pc 到 sepc 以及跳到 stvec 三件事。
在这里,ecall 是 user mode 转 supervisor mode;
stvec 指向的是 trampoline,也是 uservec。
stvec 中的值是在第一个 hart 创建时在 kernel/main.c 中调用 trapinithart 时被存入的。
uservec 中主要干四件事,
将一些 general reg 和 system reg 的值存到 trapframe 中;
将 trampoline 中的 kernel_sp、kernel_trap 等 ...
从 FP 到 pipeline 到 visitor pattern
skyleaworlder 两个月没写代码后的复健成果
旦夕——一名同济大学生对自己的救赎
过去2019 年 5 月的某个下午,我坐在学苑二楼的自选餐厅里,拿着我的 HUAWEI P20 刷着一个名为 同心云 的 APP。
说起同心云,那就有的聊了。在我入学时,同心云就是我生活不可或缺的部分,电费、校园卡充值等一系列生活功能都在同心云上完成。不仅如此,同心云还是我获取信息的关键渠道——同心云中内置了 “万人朋友圈” / “微博” 功能(也被称作同心云大厅),每一名同济师生都有自己的账号,全校都能收到我发送的消息,我也能看到全校人的生活。
但当时的我万万想不到同心云 APP 会在不久的将来淡出几乎全校人的视野。
2019 年 5 月 20 号是无法在同济大学历史上留下痕迹的校庆,也是唯一一次我记得住的校庆。不知是不是由于嘉定天猫超市偷拍事件 + 四平路校区 LGBTQ 相关争执的合力影响,之后不久,也就是 6 月初,同心云下架了微博功能。当时我以为只是技术调整,等到了 6 月中旬就会再次开放。事实也是如此,2019 年 7 月 12 日,微博功能再度开放。
当然,你可以说这是回光返照。不到一天,微博功能便再次下架。至此,同心云微博功能再无音信。
同心云于 2015 年末上线,也 ...
我的本科(课外)
我本科最后 16 个学分出了。再加上前两天 2022 年高考出分,这让我回忆起了 4 年前的这段时间。4 年过得很快,快到让我想专门发一个贴子来总结一下自己这段时间课程之外的学习。
入学前C Programming Language
对了高考答案之后我才发现我大概会考出高三一年里第二高的成绩,于是先是高兴了一段时间。但是当我看到自己高一上学期 ~ 高三上学期的期末成绩时,才发现自己的高考成绩只能算是平均水平(我好像一直都是到了最后才认真考试)。
最后出成绩发现比自己估的分低一些。我那个分数段比较尴尬,高个 5 分位次就能缩一半。于是命中注定来到同济大学。幸运又不幸的是,我被第一志愿录取。
在得知自己被计算机专业录取后,我立刻上知乎查怎么学计算机这门专业——我相信大多数大陆同学在 2015 年到 2018 年的优质信息渠道就是知乎了。我自认为我还是可以分辨干货的。在知乎上我看到了一个 “让从 《C Primer Plus》 入门,之后学 《C++ Primer Plus》 / 《C 和指针》 / 《Effective C++》” 的回答。于是我第二天就跑到市里面的新华书店看这本《C Pr ...