二进制插桩~
- 说点什么
- 插桩是啥
- 为啥要插桩
- 如何插桩
- 两种主要方式和三种执行模式
- 方式1:
- 方式2:
- 第一种模式:
- 第二种模式:
- 第三种模式:
- 插桩实例
说点什么
虽然不是主要做这个的,但是安全工程师的知识面太大咯,
学习其它科目的知识有助于锻炼思维,所以记一下学习过程
插桩是啥
动态二进制插桩(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)在选定的位置要执行的代码
动态二进制插桩原理与实战相关推荐
- 动态二进制插桩的原理和基本实现过程(Pin/DynamoRIO/Frida)
英文原文全文 http://deniable.org/reversing/binary-instrumentation 译转自https://www.4hou.com/binary/13026.htm ...
- LSM零知识学习六、插桩原理实现细节(4)
接前一篇文章:LSM零知识学习五.插桩原理实现细节(3) 本文内容参考: LSM(Linux Security Modules)框架原理解析_lsm linux_pwl999的博客-CSDN博客 特此 ...
- LSM零知识学习四、插桩原理实现细节(2)
接前一篇文章:LSM零知识学习三.插桩原理实现细节(1) 本文内容参考: LSM(Linux Security Modules)框架原理解析_lsm linux_pwl999的博客-CSDN博客 特此 ...
- 插桩valgrind_基于动态插桩的CC++内存泄漏检测工具的设计与实现.pdf
基于动态插桩的CC++内存泄漏检测工具的设计与实现.pdf 第32卷第6期 计 算 机 应 用 研 究 V01.32No.6 20l5年 6月 ApplicationResearchofCompute ...
- vm磁盘映射 不能启动_iOS 启动优化之Clang插桩实现二进制重排
前言 原文作者:李斌同学 原文链接:https://juejin.im/post/6844904130406793224 自从抖音团队分享了这篇 抖音研发实践:基于二进制文件重排的解决方案 APP启动 ...
- iOS启动优化-二进制重排与Clang插桩
二进制重排与Clang插桩 背景 优化方案 准备 认识 插件安装 启动优化 操作系统 演进史 进程通信 二进制重排 .Order文件 小节问题 Clang插桩 Clang插桩配置 Clang插桩原理( ...
- 【字节码插桩】AOP 技术 ( “字节码插桩“ 技术简介 | AspectJ 插桩工具 | ASM 插桩工具 )
文章目录 一." 字节码插桩 " 技术简介 二.AspectJ 插桩工具 三.ASM 插桩工具 一." 字节码插桩 " 技术简介 性能优化 , 插件化 , 热修 ...
- 编译器 LLVM Clang原理与实战 制作自己的编译器 source-to-source 源代码转换 编译遍 compile pass 代码插桩
编译器 LLVM Clang原理与实战 参考1 clang LLVM CMU 教案 深入剖析-iOS-编译-Clang-LLVM LLVM_proj LLVM编程索引 llvm源码浏览带跳转 llvm ...
- Windows环境下Pin(二进制动态插桩引擎)搭建
文章目录 安装包下载链接: 环境配置 编译Pintool 报错1(无法打开包括文件:"xed-iclass-enum.h":No such file or directory): ...
最新文章
- Django连接mysql数据库
- 机甲才是男人的浪漫 这款Python版免费战争机甲类游戏,“白拿党”还在等什么?(超帅气)
- mvc @html.textboxfor 添加正则表示式,如何在C#/ MVC 4中的Html.TextBoxFor中输入占位符文本...
- vue双击事件_我总结了12个Vue.js开发技巧和窍门
- 「软件项目管理」一文详解软件项目质量计划
- linux 0.11 源码学习(二)
- 用于CPU性能SQL Server监视工具
- java随机10位随机数 random.uuid_一文详解编程中的随机数
- C语言指针函数和函数指针区别
- ubuntu安装显卡驱动后无法进入系统
- 基于MC1496的DSB调制电路的设计与分析
- 第50篇-企查查请求头参数分析【2022-09-29】
- 【论文笔记】强化学习论文阅读-Model-Based RL 9篇
- ebs oracle xml publisher 不是有效责任,EBS excel模板xml publisher开发详解
- 关闭联通游戏代扣费的功能
- JreBel热部署插件激活教程
- PS精修教程:如何给后期人物进行精修
- Linux版的led显示屏控制软件,led显示屏控制软件
- python fsolve说明_在python中使用fsolve时形状不匹配
- 数据分析及可视化——京东上销量最高的鞋子
热门文章
- Yolov5训练自制数据集
- 基于张量网络的机器学习(八)
- 招聘系统自研工时评估及方案说明书
- 计算机基础课目录,计算机基础课程Word目录自动生成机制
- html转义字符输出,dart – 如何为HTML转义字符串?
- 电路与电子线路实验I(软件)——北京理工大学
- 403,和404 啥意思?
- 百度BML上传压缩包导入失败,“数据集本次导入完成,因压缩包解压未成功,导致部分样本未上传成功”
- 2017云栖大会参会体验
- [智能硬件] 1、三分钟看懂智能硬件原理——蓝牙防丢器制作教程(包括手机应用)...