Areas of interests:
Fuzzing
Fuzzing is a software testing technic involving feeding the software under test with quasi-random data.
Instrumentation
- bpfinst-spec / docs – generic eBPF-based interface for implementing not-too-complex per-instruction instrumentations trivialy. You just write “pseudocode” in C with properly named functions, then compile it into eBPF object file… and that pseudo-pseudocode is inserted before every corresponding instruction in an efficient manner. These functions can process corresponding instructions operands, and get/set associated 64-bit-wide tags
- QInst – a QEMU-based dynamic instrumentation engine. Able to instrument user-space processes on Linux host (via traditional
qemu-user-*
emulators). Technically, should be almost ready for full-system instrumentation - SimpleInst – a proof-of-concept instrumenter built into particular instance of RocketChip soft-processor at the time of Verilog code generation (not yet supports tags)
- LLInst – a static white-box instrumentation engine implemented as an LLVM pass
- QInst – a QEMU-based dynamic instrumentation engine. Able to instrument user-space processes on Linux host (via traditional
Chisel HDL
Chisel is a hardware description language embedded into Scala as a DSL. It makes it possible to write some hardware description in Scala with rich Scala IDE support for navigating, refactoring, etc. in a much FPGA vendor-agnostic way. Then just compile & run to produce Verilog source to be fed to vendor-dependent tool.
- SimpleInst – RoCC accelerator implementation that is able to turn simple functions from eBPF object files into CPU instructions
- Patched RocketChip implementation to be used with SimpleInst that invokes RoCC accelerator instructions as a bpfinst instrumenters
IDEs and tooling
- Sent numerous patches to OpenModelica
- implemented context-aware code completion in OMEdit by bridging the gap between pre-existing rudimentary snippet suggester and pre-existing link to OMC backend
- PMD
- implementation of language module for Modelica
- Source Code Minimizer utility that reuses existing (full PMD, not CPD) language support to minimize a source code file preserving some invariant
Executable jokes
QEMU.js (WIP) – a proof-of-concept port of QEMU to web browser featuring machine-code-to-WASM JIT compiler
Misc
- afl-dr – implementation of specific AFL-like instrumentation with DynamoRIO, not a bpfinst instrumenter
- Analog video signal generator in Chisel – video signal generator (works only for B/W) for Marsohod2 FPGA board… and rudimentary oscilloscope for self-debugging :)
- Port of MemTest86+ to RISC-V – an attempt to make MemTest86+ cross-platform and specifically run on my development board on RocketChip soft-processor