二进制插桩~

  • 说点什么
  • 插桩是啥
  • 为啥要插桩
    • 源代码插桩
    • 二进制插桩
  • 如何插桩
    • 两种主要方式和三种执行模式
      • 方式1:
      • 方式2:
      • 第一种模式:
      • 第二种模式:
      • 第三种模式:
  • 插桩实例
    • Pin 动态二进制插桩

说点什么

虽然不是主要做这个的,但是安全工程师的知识面太大咯,
学习其它科目的知识有助于锻炼思维,所以记一下学习过程

插桩是啥

动态二进制插桩(dynamic binary instrumentation ,DBI)技术是一种通过注入插桩代码,来分析二进制应用程序在运行时的行为的方法。

动态二进制插桩技术,可以在不影响程序动态执行结果的前提下,按照用户的分析需求,在程序执行过程中插入特定分析代码,实现对程序动态执行过程的监控与分析。

为啥要插桩

源代码插桩

大家调试程序一定试过这样的方法:

。。。。。
printf("牛奶颜色:%s\n", milk_color);
。。。。

这就是源代码插桩,方便快捷,如果牛奶颜色是黑色,程序就出错了

二进制插桩

将插桩代码注入正在运行的进程,也就能调试程序了…

mov esp, ebp
我插,我看~
pop ebp

例如这样能看到ebp了,不过过程比源代码插桩更繁琐,需要拆解。

如何插桩

两种主要方式和三种执行模式

方式1:

在动态二进制系统的控制下从头到尾执行程序。

#mermaid-svg-B0ZvDeSS7aZF0VTI .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .label text{fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .node rect,#mermaid-svg-B0ZvDeSS7aZF0VTI .node circle,#mermaid-svg-B0ZvDeSS7aZF0VTI .node ellipse,#mermaid-svg-B0ZvDeSS7aZF0VTI .node polygon,#mermaid-svg-B0ZvDeSS7aZF0VTI .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-B0ZvDeSS7aZF0VTI .node .label{text-align:center;fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .node.clickable{cursor:pointer}#mermaid-svg-B0ZvDeSS7aZF0VTI .arrowheadPath{fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-B0ZvDeSS7aZF0VTI .flowchart-link{stroke:#333;fill:none}#mermaid-svg-B0ZvDeSS7aZF0VTI .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-B0ZvDeSS7aZF0VTI .edgeLabel rect{opacity:0.9}#mermaid-svg-B0ZvDeSS7aZF0VTI .edgeLabel span{color:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-B0ZvDeSS7aZF0VTI .cluster text{fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-B0ZvDeSS7aZF0VTI .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-B0ZvDeSS7aZF0VTI text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-B0ZvDeSS7aZF0VTI .actor-line{stroke:grey}#mermaid-svg-B0ZvDeSS7aZF0VTI .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .sequenceNumber{fill:#fff}#mermaid-svg-B0ZvDeSS7aZF0VTI #sequencenumber{fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI #crosshead path{fill:#333;stroke:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .messageText{fill:#333;stroke:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-B0ZvDeSS7aZF0VTI .labelText,#mermaid-svg-B0ZvDeSS7aZF0VTI .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-B0ZvDeSS7aZF0VTI .loopText,#mermaid-svg-B0ZvDeSS7aZF0VTI .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-B0ZvDeSS7aZF0VTI .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-B0ZvDeSS7aZF0VTI .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-B0ZvDeSS7aZF0VTI .noteText,#mermaid-svg-B0ZvDeSS7aZF0VTI .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-B0ZvDeSS7aZF0VTI .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-B0ZvDeSS7aZF0VTI .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-B0ZvDeSS7aZF0VTI .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-B0ZvDeSS7aZF0VTI .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B0ZvDeSS7aZF0VTI .section{stroke:none;opacity:0.2}#mermaid-svg-B0ZvDeSS7aZF0VTI .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-B0ZvDeSS7aZF0VTI .section2{fill:#fff400}#mermaid-svg-B0ZvDeSS7aZF0VTI .section1,#mermaid-svg-B0ZvDeSS7aZF0VTI .section3{fill:#fff;opacity:0.2}#mermaid-svg-B0ZvDeSS7aZF0VTI .sectionTitle0{fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .sectionTitle1{fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .sectionTitle2{fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .sectionTitle3{fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B0ZvDeSS7aZF0VTI .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-B0ZvDeSS7aZF0VTI .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B0ZvDeSS7aZF0VTI .grid path{stroke-width:0}#mermaid-svg-B0ZvDeSS7aZF0VTI .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-B0ZvDeSS7aZF0VTI .task{stroke-width:2}#mermaid-svg-B0ZvDeSS7aZF0VTI .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B0ZvDeSS7aZF0VTI .taskText:not([font-size]){font-size:11px}#mermaid-svg-B0ZvDeSS7aZF0VTI .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B0ZvDeSS7aZF0VTI .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-B0ZvDeSS7aZF0VTI .task.clickable{cursor:pointer}#mermaid-svg-B0ZvDeSS7aZF0VTI .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-B0ZvDeSS7aZF0VTI .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-B0ZvDeSS7aZF0VTI .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-B0ZvDeSS7aZF0VTI .taskText0,#mermaid-svg-B0ZvDeSS7aZF0VTI .taskText1,#mermaid-svg-B0ZvDeSS7aZF0VTI .taskText2,#mermaid-svg-B0ZvDeSS7aZF0VTI .taskText3{fill:#fff}#mermaid-svg-B0ZvDeSS7aZF0VTI .task0,#mermaid-svg-B0ZvDeSS7aZF0VTI .task1,#mermaid-svg-B0ZvDeSS7aZF0VTI .task2,#mermaid-svg-B0ZvDeSS7aZF0VTI .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-B0ZvDeSS7aZF0VTI .taskTextOutside0,#mermaid-svg-B0ZvDeSS7aZF0VTI .taskTextOutside2{fill:#000}#mermaid-svg-B0ZvDeSS7aZF0VTI .taskTextOutside1,#mermaid-svg-B0ZvDeSS7aZF0VTI .taskTextOutside3{fill:#000}#mermaid-svg-B0ZvDeSS7aZF0VTI .active0,#mermaid-svg-B0ZvDeSS7aZF0VTI .active1,#mermaid-svg-B0ZvDeSS7aZF0VTI .active2,#mermaid-svg-B0ZvDeSS7aZF0VTI .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-B0ZvDeSS7aZF0VTI .activeText0,#mermaid-svg-B0ZvDeSS7aZF0VTI .activeText1,#mermaid-svg-B0ZvDeSS7aZF0VTI .activeText2,#mermaid-svg-B0ZvDeSS7aZF0VTI .activeText3{fill:#000 !important}#mermaid-svg-B0ZvDeSS7aZF0VTI .done0,#mermaid-svg-B0ZvDeSS7aZF0VTI .done1,#mermaid-svg-B0ZvDeSS7aZF0VTI .done2,#mermaid-svg-B0ZvDeSS7aZF0VTI .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-B0ZvDeSS7aZF0VTI .doneText0,#mermaid-svg-B0ZvDeSS7aZF0VTI .doneText1,#mermaid-svg-B0ZvDeSS7aZF0VTI .doneText2,#mermaid-svg-B0ZvDeSS7aZF0VTI .doneText3{fill:#000 !important}#mermaid-svg-B0ZvDeSS7aZF0VTI .crit0,#mermaid-svg-B0ZvDeSS7aZF0VTI .crit1,#mermaid-svg-B0ZvDeSS7aZF0VTI .crit2,#mermaid-svg-B0ZvDeSS7aZF0VTI .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-B0ZvDeSS7aZF0VTI .activeCrit0,#mermaid-svg-B0ZvDeSS7aZF0VTI .activeCrit1,#mermaid-svg-B0ZvDeSS7aZF0VTI .activeCrit2,#mermaid-svg-B0ZvDeSS7aZF0VTI .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-B0ZvDeSS7aZF0VTI .doneCrit0,#mermaid-svg-B0ZvDeSS7aZF0VTI .doneCrit1,#mermaid-svg-B0ZvDeSS7aZF0VTI .doneCrit2,#mermaid-svg-B0ZvDeSS7aZF0VTI .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-B0ZvDeSS7aZF0VTI .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-B0ZvDeSS7aZF0VTI .milestoneText{font-style:italic}#mermaid-svg-B0ZvDeSS7aZF0VTI .doneCritText0,#mermaid-svg-B0ZvDeSS7aZF0VTI .doneCritText1,#mermaid-svg-B0ZvDeSS7aZF0VTI .doneCritText2,#mermaid-svg-B0ZvDeSS7aZF0VTI .doneCritText3{fill:#000 !important}#mermaid-svg-B0ZvDeSS7aZF0VTI .activeCritText0,#mermaid-svg-B0ZvDeSS7aZF0VTI .activeCritText1,#mermaid-svg-B0ZvDeSS7aZF0VTI .activeCritText2,#mermaid-svg-B0ZvDeSS7aZF0VTI .activeCritText3{fill:#000 !important}#mermaid-svg-B0ZvDeSS7aZF0VTI .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B0ZvDeSS7aZF0VTI g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-B0ZvDeSS7aZF0VTI g.classGroup text .title{font-weight:bolder}#mermaid-svg-B0ZvDeSS7aZF0VTI g.clickable{cursor:pointer}#mermaid-svg-B0ZvDeSS7aZF0VTI g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-B0ZvDeSS7aZF0VTI g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-B0ZvDeSS7aZF0VTI .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-B0ZvDeSS7aZF0VTI .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-B0ZvDeSS7aZF0VTI .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-B0ZvDeSS7aZF0VTI .dashed-line{stroke-dasharray:3}#mermaid-svg-B0ZvDeSS7aZF0VTI #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B0ZvDeSS7aZF0VTI #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B0ZvDeSS7aZF0VTI #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-B0ZvDeSS7aZF0VTI #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-B0ZvDeSS7aZF0VTI #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B0ZvDeSS7aZF0VTI #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B0ZvDeSS7aZF0VTI #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B0ZvDeSS7aZF0VTI #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B0ZvDeSS7aZF0VTI .commit-id,#mermaid-svg-B0ZvDeSS7aZF0VTI .commit-msg,#mermaid-svg-B0ZvDeSS7aZF0VTI .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B0ZvDeSS7aZF0VTI .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B0ZvDeSS7aZF0VTI .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B0ZvDeSS7aZF0VTI g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B0ZvDeSS7aZF0VTI g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-B0ZvDeSS7aZF0VTI g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-B0ZvDeSS7aZF0VTI g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-B0ZvDeSS7aZF0VTI g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-B0ZvDeSS7aZF0VTI .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-B0ZvDeSS7aZF0VTI .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-B0ZvDeSS7aZF0VTI .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-B0ZvDeSS7aZF0VTI .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-B0ZvDeSS7aZF0VTI .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-B0ZvDeSS7aZF0VTI .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-B0ZvDeSS7aZF0VTI .edgeLabel text{fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B0ZvDeSS7aZF0VTI .node circle.state-start{fill:black;stroke:black}#mermaid-svg-B0ZvDeSS7aZF0VTI .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-B0ZvDeSS7aZF0VTI #statediagram-barbEnd{fill:#9370db}#mermaid-svg-B0ZvDeSS7aZF0VTI .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-B0ZvDeSS7aZF0VTI .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-B0ZvDeSS7aZF0VTI .statediagram-state .divider{stroke:#9370db}#mermaid-svg-B0ZvDeSS7aZF0VTI .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-B0ZvDeSS7aZF0VTI .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-B0ZvDeSS7aZF0VTI .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-B0ZvDeSS7aZF0VTI .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-B0ZvDeSS7aZF0VTI .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-B0ZvDeSS7aZF0VTI .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-B0ZvDeSS7aZF0VTI .note-edge{stroke-dasharray:5}#mermaid-svg-B0ZvDeSS7aZF0VTI .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-B0ZvDeSS7aZF0VTI .error-icon{fill:#522}#mermaid-svg-B0ZvDeSS7aZF0VTI .error-text{fill:#522;stroke:#522}#mermaid-svg-B0ZvDeSS7aZF0VTI .edge-thickness-normal{stroke-width:2px}#mermaid-svg-B0ZvDeSS7aZF0VTI .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-B0ZvDeSS7aZF0VTI .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-B0ZvDeSS7aZF0VTI .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-B0ZvDeSS7aZF0VTI .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-B0ZvDeSS7aZF0VTI .marker{fill:#333}#mermaid-svg-B0ZvDeSS7aZF0VTI .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-B0ZvDeSS7aZF0VTI {color: rgba(0, 0, 0, 0.75);font: ;}

系统
控制
程序

方式2:

动态二进制系统可以被附加到一个已经运行的程序中

#mermaid-svg-SYAYEzDvd4mZsgmy .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .label text{fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .node rect,#mermaid-svg-SYAYEzDvd4mZsgmy .node circle,#mermaid-svg-SYAYEzDvd4mZsgmy .node ellipse,#mermaid-svg-SYAYEzDvd4mZsgmy .node polygon,#mermaid-svg-SYAYEzDvd4mZsgmy .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-SYAYEzDvd4mZsgmy .node .label{text-align:center;fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .node.clickable{cursor:pointer}#mermaid-svg-SYAYEzDvd4mZsgmy .arrowheadPath{fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-SYAYEzDvd4mZsgmy .flowchart-link{stroke:#333;fill:none}#mermaid-svg-SYAYEzDvd4mZsgmy .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-SYAYEzDvd4mZsgmy .edgeLabel rect{opacity:0.9}#mermaid-svg-SYAYEzDvd4mZsgmy .edgeLabel span{color:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-SYAYEzDvd4mZsgmy .cluster text{fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-SYAYEzDvd4mZsgmy .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-SYAYEzDvd4mZsgmy text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-SYAYEzDvd4mZsgmy .actor-line{stroke:grey}#mermaid-svg-SYAYEzDvd4mZsgmy .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-SYAYEzDvd4mZsgmy #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .sequenceNumber{fill:#fff}#mermaid-svg-SYAYEzDvd4mZsgmy #sequencenumber{fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy #crosshead path{fill:#333;stroke:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .messageText{fill:#333;stroke:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-SYAYEzDvd4mZsgmy .labelText,#mermaid-svg-SYAYEzDvd4mZsgmy .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-SYAYEzDvd4mZsgmy .loopText,#mermaid-svg-SYAYEzDvd4mZsgmy .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-SYAYEzDvd4mZsgmy .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-SYAYEzDvd4mZsgmy .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-SYAYEzDvd4mZsgmy .noteText,#mermaid-svg-SYAYEzDvd4mZsgmy .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-SYAYEzDvd4mZsgmy .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-SYAYEzDvd4mZsgmy .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-SYAYEzDvd4mZsgmy .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-SYAYEzDvd4mZsgmy .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SYAYEzDvd4mZsgmy .section{stroke:none;opacity:0.2}#mermaid-svg-SYAYEzDvd4mZsgmy .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-SYAYEzDvd4mZsgmy .section2{fill:#fff400}#mermaid-svg-SYAYEzDvd4mZsgmy .section1,#mermaid-svg-SYAYEzDvd4mZsgmy .section3{fill:#fff;opacity:0.2}#mermaid-svg-SYAYEzDvd4mZsgmy .sectionTitle0{fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .sectionTitle1{fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .sectionTitle2{fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .sectionTitle3{fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SYAYEzDvd4mZsgmy .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-SYAYEzDvd4mZsgmy .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SYAYEzDvd4mZsgmy .grid path{stroke-width:0}#mermaid-svg-SYAYEzDvd4mZsgmy .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-SYAYEzDvd4mZsgmy .task{stroke-width:2}#mermaid-svg-SYAYEzDvd4mZsgmy .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SYAYEzDvd4mZsgmy .taskText:not([font-size]){font-size:11px}#mermaid-svg-SYAYEzDvd4mZsgmy .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SYAYEzDvd4mZsgmy .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-SYAYEzDvd4mZsgmy .task.clickable{cursor:pointer}#mermaid-svg-SYAYEzDvd4mZsgmy .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-SYAYEzDvd4mZsgmy .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-SYAYEzDvd4mZsgmy .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-SYAYEzDvd4mZsgmy .taskText0,#mermaid-svg-SYAYEzDvd4mZsgmy .taskText1,#mermaid-svg-SYAYEzDvd4mZsgmy .taskText2,#mermaid-svg-SYAYEzDvd4mZsgmy .taskText3{fill:#fff}#mermaid-svg-SYAYEzDvd4mZsgmy .task0,#mermaid-svg-SYAYEzDvd4mZsgmy .task1,#mermaid-svg-SYAYEzDvd4mZsgmy .task2,#mermaid-svg-SYAYEzDvd4mZsgmy .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-SYAYEzDvd4mZsgmy .taskTextOutside0,#mermaid-svg-SYAYEzDvd4mZsgmy .taskTextOutside2{fill:#000}#mermaid-svg-SYAYEzDvd4mZsgmy .taskTextOutside1,#mermaid-svg-SYAYEzDvd4mZsgmy .taskTextOutside3{fill:#000}#mermaid-svg-SYAYEzDvd4mZsgmy .active0,#mermaid-svg-SYAYEzDvd4mZsgmy .active1,#mermaid-svg-SYAYEzDvd4mZsgmy .active2,#mermaid-svg-SYAYEzDvd4mZsgmy .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-SYAYEzDvd4mZsgmy .activeText0,#mermaid-svg-SYAYEzDvd4mZsgmy .activeText1,#mermaid-svg-SYAYEzDvd4mZsgmy .activeText2,#mermaid-svg-SYAYEzDvd4mZsgmy .activeText3{fill:#000 !important}#mermaid-svg-SYAYEzDvd4mZsgmy .done0,#mermaid-svg-SYAYEzDvd4mZsgmy .done1,#mermaid-svg-SYAYEzDvd4mZsgmy .done2,#mermaid-svg-SYAYEzDvd4mZsgmy .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-SYAYEzDvd4mZsgmy .doneText0,#mermaid-svg-SYAYEzDvd4mZsgmy .doneText1,#mermaid-svg-SYAYEzDvd4mZsgmy .doneText2,#mermaid-svg-SYAYEzDvd4mZsgmy .doneText3{fill:#000 !important}#mermaid-svg-SYAYEzDvd4mZsgmy .crit0,#mermaid-svg-SYAYEzDvd4mZsgmy .crit1,#mermaid-svg-SYAYEzDvd4mZsgmy .crit2,#mermaid-svg-SYAYEzDvd4mZsgmy .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-SYAYEzDvd4mZsgmy .activeCrit0,#mermaid-svg-SYAYEzDvd4mZsgmy .activeCrit1,#mermaid-svg-SYAYEzDvd4mZsgmy .activeCrit2,#mermaid-svg-SYAYEzDvd4mZsgmy .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-SYAYEzDvd4mZsgmy .doneCrit0,#mermaid-svg-SYAYEzDvd4mZsgmy .doneCrit1,#mermaid-svg-SYAYEzDvd4mZsgmy .doneCrit2,#mermaid-svg-SYAYEzDvd4mZsgmy .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-SYAYEzDvd4mZsgmy .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-SYAYEzDvd4mZsgmy .milestoneText{font-style:italic}#mermaid-svg-SYAYEzDvd4mZsgmy .doneCritText0,#mermaid-svg-SYAYEzDvd4mZsgmy .doneCritText1,#mermaid-svg-SYAYEzDvd4mZsgmy .doneCritText2,#mermaid-svg-SYAYEzDvd4mZsgmy .doneCritText3{fill:#000 !important}#mermaid-svg-SYAYEzDvd4mZsgmy .activeCritText0,#mermaid-svg-SYAYEzDvd4mZsgmy .activeCritText1,#mermaid-svg-SYAYEzDvd4mZsgmy .activeCritText2,#mermaid-svg-SYAYEzDvd4mZsgmy .activeCritText3{fill:#000 !important}#mermaid-svg-SYAYEzDvd4mZsgmy .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SYAYEzDvd4mZsgmy g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-SYAYEzDvd4mZsgmy g.classGroup text .title{font-weight:bolder}#mermaid-svg-SYAYEzDvd4mZsgmy g.clickable{cursor:pointer}#mermaid-svg-SYAYEzDvd4mZsgmy g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-SYAYEzDvd4mZsgmy g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-SYAYEzDvd4mZsgmy .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-SYAYEzDvd4mZsgmy .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-SYAYEzDvd4mZsgmy .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-SYAYEzDvd4mZsgmy .dashed-line{stroke-dasharray:3}#mermaid-svg-SYAYEzDvd4mZsgmy #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SYAYEzDvd4mZsgmy #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SYAYEzDvd4mZsgmy #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-SYAYEzDvd4mZsgmy #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-SYAYEzDvd4mZsgmy #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SYAYEzDvd4mZsgmy #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SYAYEzDvd4mZsgmy #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SYAYEzDvd4mZsgmy #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SYAYEzDvd4mZsgmy .commit-id,#mermaid-svg-SYAYEzDvd4mZsgmy .commit-msg,#mermaid-svg-SYAYEzDvd4mZsgmy .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SYAYEzDvd4mZsgmy .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SYAYEzDvd4mZsgmy .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SYAYEzDvd4mZsgmy g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SYAYEzDvd4mZsgmy g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-SYAYEzDvd4mZsgmy g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-SYAYEzDvd4mZsgmy g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-SYAYEzDvd4mZsgmy g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-SYAYEzDvd4mZsgmy .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-SYAYEzDvd4mZsgmy .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-SYAYEzDvd4mZsgmy .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-SYAYEzDvd4mZsgmy .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-SYAYEzDvd4mZsgmy .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-SYAYEzDvd4mZsgmy .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-SYAYEzDvd4mZsgmy .edgeLabel text{fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SYAYEzDvd4mZsgmy .node circle.state-start{fill:black;stroke:black}#mermaid-svg-SYAYEzDvd4mZsgmy .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-SYAYEzDvd4mZsgmy #statediagram-barbEnd{fill:#9370db}#mermaid-svg-SYAYEzDvd4mZsgmy .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-SYAYEzDvd4mZsgmy .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-SYAYEzDvd4mZsgmy .statediagram-state .divider{stroke:#9370db}#mermaid-svg-SYAYEzDvd4mZsgmy .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-SYAYEzDvd4mZsgmy .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-SYAYEzDvd4mZsgmy .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-SYAYEzDvd4mZsgmy .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-SYAYEzDvd4mZsgmy .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-SYAYEzDvd4mZsgmy .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-SYAYEzDvd4mZsgmy .note-edge{stroke-dasharray:5}#mermaid-svg-SYAYEzDvd4mZsgmy .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-SYAYEzDvd4mZsgmy .error-icon{fill:#522}#mermaid-svg-SYAYEzDvd4mZsgmy .error-text{fill:#522;stroke:#522}#mermaid-svg-SYAYEzDvd4mZsgmy .edge-thickness-normal{stroke-width:2px}#mermaid-svg-SYAYEzDvd4mZsgmy .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-SYAYEzDvd4mZsgmy .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-SYAYEzDvd4mZsgmy .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-SYAYEzDvd4mZsgmy .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-SYAYEzDvd4mZsgmy .marker{fill:#333}#mermaid-svg-SYAYEzDvd4mZsgmy .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-SYAYEzDvd4mZsgmy {color: rgba(0, 0, 0, 0.75);font: ;}

系统
附加到
程序

第一种模式:

JIT模式是最常见的实现方式,也是最常用的模式:
复制一个文件,进行修改,再执行

#mermaid-svg-dArOeMjfiiTRwi2D .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-dArOeMjfiiTRwi2D .label text{fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D .node rect,#mermaid-svg-dArOeMjfiiTRwi2D .node circle,#mermaid-svg-dArOeMjfiiTRwi2D .node ellipse,#mermaid-svg-dArOeMjfiiTRwi2D .node polygon,#mermaid-svg-dArOeMjfiiTRwi2D .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-dArOeMjfiiTRwi2D .node .label{text-align:center;fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D .node.clickable{cursor:pointer}#mermaid-svg-dArOeMjfiiTRwi2D .arrowheadPath{fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-dArOeMjfiiTRwi2D .flowchart-link{stroke:#333;fill:none}#mermaid-svg-dArOeMjfiiTRwi2D .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-dArOeMjfiiTRwi2D .edgeLabel rect{opacity:0.9}#mermaid-svg-dArOeMjfiiTRwi2D .edgeLabel span{color:#333}#mermaid-svg-dArOeMjfiiTRwi2D .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-dArOeMjfiiTRwi2D .cluster text{fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-dArOeMjfiiTRwi2D .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-dArOeMjfiiTRwi2D text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-dArOeMjfiiTRwi2D .actor-line{stroke:grey}#mermaid-svg-dArOeMjfiiTRwi2D .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-dArOeMjfiiTRwi2D .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-dArOeMjfiiTRwi2D #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-dArOeMjfiiTRwi2D .sequenceNumber{fill:#fff}#mermaid-svg-dArOeMjfiiTRwi2D #sequencenumber{fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D #crosshead path{fill:#333;stroke:#333}#mermaid-svg-dArOeMjfiiTRwi2D .messageText{fill:#333;stroke:#333}#mermaid-svg-dArOeMjfiiTRwi2D .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-dArOeMjfiiTRwi2D .labelText,#mermaid-svg-dArOeMjfiiTRwi2D .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-dArOeMjfiiTRwi2D .loopText,#mermaid-svg-dArOeMjfiiTRwi2D .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-dArOeMjfiiTRwi2D .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-dArOeMjfiiTRwi2D .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-dArOeMjfiiTRwi2D .noteText,#mermaid-svg-dArOeMjfiiTRwi2D .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-dArOeMjfiiTRwi2D .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-dArOeMjfiiTRwi2D .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-dArOeMjfiiTRwi2D .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-dArOeMjfiiTRwi2D .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dArOeMjfiiTRwi2D .section{stroke:none;opacity:0.2}#mermaid-svg-dArOeMjfiiTRwi2D .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-dArOeMjfiiTRwi2D .section2{fill:#fff400}#mermaid-svg-dArOeMjfiiTRwi2D .section1,#mermaid-svg-dArOeMjfiiTRwi2D .section3{fill:#fff;opacity:0.2}#mermaid-svg-dArOeMjfiiTRwi2D .sectionTitle0{fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D .sectionTitle1{fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D .sectionTitle2{fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D .sectionTitle3{fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dArOeMjfiiTRwi2D .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-dArOeMjfiiTRwi2D .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dArOeMjfiiTRwi2D .grid path{stroke-width:0}#mermaid-svg-dArOeMjfiiTRwi2D .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-dArOeMjfiiTRwi2D .task{stroke-width:2}#mermaid-svg-dArOeMjfiiTRwi2D .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dArOeMjfiiTRwi2D .taskText:not([font-size]){font-size:11px}#mermaid-svg-dArOeMjfiiTRwi2D .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dArOeMjfiiTRwi2D .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-dArOeMjfiiTRwi2D .task.clickable{cursor:pointer}#mermaid-svg-dArOeMjfiiTRwi2D .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-dArOeMjfiiTRwi2D .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-dArOeMjfiiTRwi2D .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-dArOeMjfiiTRwi2D .taskText0,#mermaid-svg-dArOeMjfiiTRwi2D .taskText1,#mermaid-svg-dArOeMjfiiTRwi2D .taskText2,#mermaid-svg-dArOeMjfiiTRwi2D .taskText3{fill:#fff}#mermaid-svg-dArOeMjfiiTRwi2D .task0,#mermaid-svg-dArOeMjfiiTRwi2D .task1,#mermaid-svg-dArOeMjfiiTRwi2D .task2,#mermaid-svg-dArOeMjfiiTRwi2D .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-dArOeMjfiiTRwi2D .taskTextOutside0,#mermaid-svg-dArOeMjfiiTRwi2D .taskTextOutside2{fill:#000}#mermaid-svg-dArOeMjfiiTRwi2D .taskTextOutside1,#mermaid-svg-dArOeMjfiiTRwi2D .taskTextOutside3{fill:#000}#mermaid-svg-dArOeMjfiiTRwi2D .active0,#mermaid-svg-dArOeMjfiiTRwi2D .active1,#mermaid-svg-dArOeMjfiiTRwi2D .active2,#mermaid-svg-dArOeMjfiiTRwi2D .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-dArOeMjfiiTRwi2D .activeText0,#mermaid-svg-dArOeMjfiiTRwi2D .activeText1,#mermaid-svg-dArOeMjfiiTRwi2D .activeText2,#mermaid-svg-dArOeMjfiiTRwi2D .activeText3{fill:#000 !important}#mermaid-svg-dArOeMjfiiTRwi2D .done0,#mermaid-svg-dArOeMjfiiTRwi2D .done1,#mermaid-svg-dArOeMjfiiTRwi2D .done2,#mermaid-svg-dArOeMjfiiTRwi2D .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-dArOeMjfiiTRwi2D .doneText0,#mermaid-svg-dArOeMjfiiTRwi2D .doneText1,#mermaid-svg-dArOeMjfiiTRwi2D .doneText2,#mermaid-svg-dArOeMjfiiTRwi2D .doneText3{fill:#000 !important}#mermaid-svg-dArOeMjfiiTRwi2D .crit0,#mermaid-svg-dArOeMjfiiTRwi2D .crit1,#mermaid-svg-dArOeMjfiiTRwi2D .crit2,#mermaid-svg-dArOeMjfiiTRwi2D .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-dArOeMjfiiTRwi2D .activeCrit0,#mermaid-svg-dArOeMjfiiTRwi2D .activeCrit1,#mermaid-svg-dArOeMjfiiTRwi2D .activeCrit2,#mermaid-svg-dArOeMjfiiTRwi2D .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-dArOeMjfiiTRwi2D .doneCrit0,#mermaid-svg-dArOeMjfiiTRwi2D .doneCrit1,#mermaid-svg-dArOeMjfiiTRwi2D .doneCrit2,#mermaid-svg-dArOeMjfiiTRwi2D .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-dArOeMjfiiTRwi2D .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-dArOeMjfiiTRwi2D .milestoneText{font-style:italic}#mermaid-svg-dArOeMjfiiTRwi2D .doneCritText0,#mermaid-svg-dArOeMjfiiTRwi2D .doneCritText1,#mermaid-svg-dArOeMjfiiTRwi2D .doneCritText2,#mermaid-svg-dArOeMjfiiTRwi2D .doneCritText3{fill:#000 !important}#mermaid-svg-dArOeMjfiiTRwi2D .activeCritText0,#mermaid-svg-dArOeMjfiiTRwi2D .activeCritText1,#mermaid-svg-dArOeMjfiiTRwi2D .activeCritText2,#mermaid-svg-dArOeMjfiiTRwi2D .activeCritText3{fill:#000 !important}#mermaid-svg-dArOeMjfiiTRwi2D .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dArOeMjfiiTRwi2D g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-dArOeMjfiiTRwi2D g.classGroup text .title{font-weight:bolder}#mermaid-svg-dArOeMjfiiTRwi2D g.clickable{cursor:pointer}#mermaid-svg-dArOeMjfiiTRwi2D g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-dArOeMjfiiTRwi2D g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-dArOeMjfiiTRwi2D .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-dArOeMjfiiTRwi2D .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-dArOeMjfiiTRwi2D .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-dArOeMjfiiTRwi2D .dashed-line{stroke-dasharray:3}#mermaid-svg-dArOeMjfiiTRwi2D #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dArOeMjfiiTRwi2D #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dArOeMjfiiTRwi2D #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-dArOeMjfiiTRwi2D #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-dArOeMjfiiTRwi2D #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dArOeMjfiiTRwi2D #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dArOeMjfiiTRwi2D #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dArOeMjfiiTRwi2D #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-dArOeMjfiiTRwi2D .commit-id,#mermaid-svg-dArOeMjfiiTRwi2D .commit-msg,#mermaid-svg-dArOeMjfiiTRwi2D .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dArOeMjfiiTRwi2D .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dArOeMjfiiTRwi2D .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dArOeMjfiiTRwi2D g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dArOeMjfiiTRwi2D g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-dArOeMjfiiTRwi2D g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-dArOeMjfiiTRwi2D g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-dArOeMjfiiTRwi2D g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-dArOeMjfiiTRwi2D .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-dArOeMjfiiTRwi2D .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-dArOeMjfiiTRwi2D .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-dArOeMjfiiTRwi2D .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-dArOeMjfiiTRwi2D .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-dArOeMjfiiTRwi2D .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-dArOeMjfiiTRwi2D .edgeLabel text{fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-dArOeMjfiiTRwi2D .node circle.state-start{fill:black;stroke:black}#mermaid-svg-dArOeMjfiiTRwi2D .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-dArOeMjfiiTRwi2D #statediagram-barbEnd{fill:#9370db}#mermaid-svg-dArOeMjfiiTRwi2D .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-dArOeMjfiiTRwi2D .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-dArOeMjfiiTRwi2D .statediagram-state .divider{stroke:#9370db}#mermaid-svg-dArOeMjfiiTRwi2D .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-dArOeMjfiiTRwi2D .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-dArOeMjfiiTRwi2D .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-dArOeMjfiiTRwi2D .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-dArOeMjfiiTRwi2D .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-dArOeMjfiiTRwi2D .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-dArOeMjfiiTRwi2D .note-edge{stroke-dasharray:5}#mermaid-svg-dArOeMjfiiTRwi2D .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-dArOeMjfiiTRwi2D .error-icon{fill:#522}#mermaid-svg-dArOeMjfiiTRwi2D .error-text{fill:#522;stroke:#522}#mermaid-svg-dArOeMjfiiTRwi2D .edge-thickness-normal{stroke-width:2px}#mermaid-svg-dArOeMjfiiTRwi2D .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-dArOeMjfiiTRwi2D .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-dArOeMjfiiTRwi2D .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-dArOeMjfiiTRwi2D .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-dArOeMjfiiTRwi2D .marker{fill:#333}#mermaid-svg-dArOeMjfiiTRwi2D .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-dArOeMjfiiTRwi2D {color: rgba(0, 0, 0, 0.75);font: ;}

复制文件
修改
执行

第二种模式:

解释模式

第三种模式:

探测模式,通过使用新指令来覆盖旧的指令,文件不复制

插桩实例

Pin 动态二进制插桩

Pin 是 Intel 公司研发的一个动态二进制插桩框架,可以在二进制程序运行过程中插入各种函数,以监控程序每一步的执行。
链接: 下载官网.
Pin 是一个闭源的框架,由 Pin 和 Pintool 组成。Pin 内部提供 API,用户使用 API 编写可以由 Pin 调用的动态链接库形式的插件,称为 Pintool。

通常插桩需要的两个组件都在 Pintool 中:

插桩代码(Instrumentation code)在什么位置插入插桩代码
分析代码(Analysis code)在选定的位置要执行的代码

动态二进制插桩原理与实战相关推荐

  1. 动态二进制插桩的原理和基本实现过程(Pin/DynamoRIO/Frida)

    英文原文全文 http://deniable.org/reversing/binary-instrumentation 译转自https://www.4hou.com/binary/13026.htm ...

  2. LSM零知识学习六、插桩原理实现细节(4)

    接前一篇文章:LSM零知识学习五.插桩原理实现细节(3) 本文内容参考: LSM(Linux Security Modules)框架原理解析_lsm linux_pwl999的博客-CSDN博客 特此 ...

  3. LSM零知识学习四、插桩原理实现细节(2)

    接前一篇文章:LSM零知识学习三.插桩原理实现细节(1) 本文内容参考: LSM(Linux Security Modules)框架原理解析_lsm linux_pwl999的博客-CSDN博客 特此 ...

  4. 插桩valgrind_基于动态插桩的CC++内存泄漏检测工具的设计与实现.pdf

    基于动态插桩的CC++内存泄漏检测工具的设计与实现.pdf 第32卷第6期 计 算 机 应 用 研 究 V01.32No.6 20l5年 6月 ApplicationResearchofCompute ...

  5. vm磁盘映射 不能启动_iOS 启动优化之Clang插桩实现二进制重排

    前言 原文作者:李斌同学 原文链接:https://juejin.im/post/6844904130406793224 自从抖音团队分享了这篇 抖音研发实践:基于二进制文件重排的解决方案 APP启动 ...

  6. iOS启动优化-二进制重排与Clang插桩

    二进制重排与Clang插桩 背景 优化方案 准备 认识 插件安装 启动优化 操作系统 演进史 进程通信 二进制重排 .Order文件 小节问题 Clang插桩 Clang插桩配置 Clang插桩原理( ...

  7. 【字节码插桩】AOP 技术 ( “字节码插桩“ 技术简介 | AspectJ 插桩工具 | ASM 插桩工具 )

    文章目录 一." 字节码插桩 " 技术简介 二.AspectJ 插桩工具 三.ASM 插桩工具 一." 字节码插桩 " 技术简介 性能优化 , 插件化 , 热修 ...

  8. 编译器 LLVM Clang原理与实战 制作自己的编译器 source-to-source 源代码转换 编译遍 compile pass 代码插桩

    编译器 LLVM Clang原理与实战 参考1 clang LLVM CMU 教案 深入剖析-iOS-编译-Clang-LLVM LLVM_proj LLVM编程索引 llvm源码浏览带跳转 llvm ...

  9. Windows环境下Pin(二进制动态插桩引擎)搭建

    文章目录 安装包下载链接: 环境配置 编译Pintool 报错1(无法打开包括文件:"xed-iclass-enum.h":No such file or directory): ...

最新文章

  1. Django连接mysql数据库
  2. 机甲才是男人的浪漫 这款Python版免费战争机甲类游戏,“白拿党”还在等什么?(超帅气)
  3. mvc @html.textboxfor 添加正则表示式,如何在C#/ MVC 4中的Html.TextBoxFor中输入占位符文本...
  4. vue双击事件_我总结了12个Vue.js开发技巧和窍门
  5. 「软件项目管理」一文详解软件项目质量计划
  6. linux 0.11 源码学习(二)
  7. 用于CPU性能SQL Server监视工具
  8. java随机10位随机数 random.uuid_一文详解编程中的随机数
  9. C语言指针函数和函数指针区别
  10. ubuntu安装显卡驱动后无法进入系统
  11. 基于MC1496的DSB调制电路的设计与分析
  12. 第50篇-企查查请求头参数分析【2022-09-29】
  13. 【论文笔记】强化学习论文阅读-Model-Based RL 9篇
  14. ebs oracle xml publisher 不是有效责任,EBS excel模板xml publisher开发详解
  15. 关闭联通游戏代扣费的功能
  16. JreBel热部署插件激活教程
  17. PS精修教程:如何给后期人物进行精修
  18. Linux版的led显示屏控制软件,led显示屏控制软件
  19. python fsolve说明_在python中使用fsolve时形状不匹配
  20. 数据分析及可视化——京东上销量最高的鞋子

热门文章

  1. Yolov5训练自制数据集
  2. 基于张量网络的机器学习(八)
  3. 招聘系统自研工时评估及方案说明书
  4. 计算机基础课目录,计算机基础课程Word目录自动生成机制
  5. html转义字符输出,dart – 如何为HTML转义字符串?
  6. 电路与电子线路实验I(软件)——北京理工大学
  7. 403,和404 啥意思?
  8. 百度BML上传压缩包导入失败,“数据集本次导入完成,因压缩包解压未成功,导致部分样本未上传成功”
  9. 2017云栖大会参会体验
  10. [智能硬件] 1、三分钟看懂智能硬件原理——蓝牙防丢器制作教程(包括手机应用)...