<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OCaml on RORO's blog</title><link>https://blog.rodolpheg.xyz/tags/ocaml/</link><description>Recent content in OCaml on RORO's blog</description><generator>Hugo</generator><language>fr-fr</language><managingEditor>contact@rodolpheg.xyz (0xRo)</managingEditor><webMaster>contact@rodolpheg.xyz (0xRo)</webMaster><lastBuildDate>Wed, 08 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.rodolpheg.xyz/tags/ocaml/index.xml" rel="self" type="application/rss+xml"/><item><title>Semgrep Architecture: Comprehensive Reference</title><link>https://blog.rodolpheg.xyz/posts/semgrep-architecture/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><author>contact@rodolpheg.xyz (0xRo)</author><guid>https://blog.rodolpheg.xyz/posts/semgrep-architecture/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Semgrep&lt;/strong> (Semantic Grep) is a multi-language static analysis tool that matches code by its &lt;em>structure&lt;/em> &amp;ndash; not just its text &amp;ndash; using a unified Abstract Syntax Tree and a rich pattern language. This document covers the full internal architecture from CLI entry-point to taint sink detection.&lt;/p>
&lt;/blockquote>
&lt;h2 id="table-of-contents">Table of Contents&lt;/h2>
&lt;ol start="0">
&lt;li>&lt;a href="#0-introduction">Introduction&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#01-what-is-sast">What is SAST?&lt;/a>&lt;/li>
&lt;li>&lt;a href="#02-history-of-semgrep">History of Semgrep&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#1-high-level-architecture">High-Level Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="#2-component-breakdown">Component Breakdown&lt;/a>&lt;/li>
&lt;li>&lt;a href="#3-the-full-analysis-pipeline">The Full Analysis Pipeline&lt;/a>&lt;/li>
&lt;li>&lt;a href="#4-target-discovery--filtering">Target Discovery &amp;amp; Filtering&lt;/a>&lt;/li>
&lt;li>&lt;a href="#5-rule-parsing--optimization">Rule Parsing &amp;amp; Optimization&lt;/a>&lt;/li>
&lt;li>&lt;a href="#6-parsing--the-universal-ast">Parsing &amp;amp; the Universal AST&lt;/a>&lt;/li>
&lt;li>&lt;a href="#7-the-matching-engine">The Matching Engine&lt;/a>&lt;/li>
&lt;li>&lt;a href="#8-the-intermediate-language-il--cfg">The Intermediate Language (IL) &amp;amp; CFG&lt;/a>&lt;/li>
&lt;li>&lt;a href="#9-taint-analysis-dataflow">Taint Analysis (Dataflow)&lt;/a>&lt;/li>
&lt;li>&lt;a href="#10-output--reporting-pipeline">Output &amp;amp; Reporting Pipeline&lt;/a>&lt;/li>
&lt;li>&lt;a href="#11-osemgrep--rpc-architecture">OSemgrep / RPC Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="#12-key-data-structures">Key Data Structures&lt;/a>&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="-1-why">-1. Why?&lt;/h2>
&lt;p>I have been working as a DevSecOps engineer for nearly four years now. When I started, I had little exposure to tooling like SAST, SCA, or DAST. My mindset was firmly rooted in offensive security. Penetration testing was the goal, the dream.&lt;/p></description></item></channel></rss>