-
Notifications
You must be signed in to change notification settings - Fork 0
Dot Files
Tom edited this page Jul 21, 2023
·
5 revisions
digraph OverallStructure {
/* Styles */
node [shape=box];
/* Relations */
subgraph s1 {
rank = "same";
Source -> Binary;
Binary -> ".relf" [xlabel = "readelf"];
Binary -> ".adt" [label = "bap"];
}
".adt" -> IR;
".relf" -> IR;
subgraph cluster_basil {
style = "dotted";
color = "red";
margin = "20";
newrank = true; rank = "same";
label = "BASIL";
IR -> Analyses;
Analyses:n -> Analyses:n;
Analyses -> Boogie;
}
Boogie -> "SMT Solver";
}
digraph AdtParsing {
/* Relations */
{
node [shape=box, fixedsize="True", width="1.7"];
Main -> generateVcsAdt;
generateVcsAdt -> BilAdtParser;
BilAdtParser -> AdtStatementLoader;
AdtStatementLoader -> BAPProgram;
subgraph cluster_parsing {
graph[
style="dotted",
label="Parser",
labeljust="l",
margin="15"
]
BilAdtParser
}
subgraph cluster_walking {
graph[
style="dotted",
label="Walker",
labeljust="l",
margin="15"
]
AdtStatementLoader
}
subgraph cluster_translator {
graph[
style="dotted",
label="Translator",
labeljust="l",
margin="15"
]
BAPProgram -> BAPToIR;
}
BAPToIR -> IR;
IR[shape=oval];
} // </Relations>
/* Source Code Structure */
{
edge[style="invis"];
node[shape="plaintext"];
src0 -> src1;
src1 -> src2;
src2 -> src3;
src3 -> src4;
src4 -> src5;
src5 -> src6;
} // </Source Code Structure>
/* Source Code Labels */
src0[label="scala/Main"];
src1[label="scala/util/RunUtils"];
src2[label="antlr4/BilAdt"];
src3[label="scala/translating/AdtStatementLoader"];
src4[label="scala/bap/BAPProgram"];
src5[label="scala/translating/BAPToIR"];
src6[label="scala/ir/Program"];
}
digraph BasilIR {
/* Styles */
node[shape=box, fixedsize="True", width="1.5", height="1.6"];
graph[splines=ortho]
/* Node Groups */
Program[group=g1];
Procedure[group=g1];
Block[group=g1];
Statement[group=g2];
Jump[group=g2];
{ rank = "same"; Statement; Jump; }
{
node[shape=box, fixedsize="True", width="1.5", height="0.4"];
LocalAssign;
MemoryAssign;
GoTo[group=g2];
DirectCall;
IndirectCall;
}
/* Relations */
Program -> Procedure;
Program -> MemorySection;
Procedure -> Block;
Block -> Statement;
Block -> Jump;
Statement -> LocalAssign;
Statement -> MemoryAssign;
Jump -> GoTo;
Jump -> DirectCall;
Jump -> IndirectCall;
/* Node Contents */
Program[label = <
<table border="0">
<tr><td align="text" width="100%">Program</td></tr>
<tr><td align="text">• procedures<br align="left"/></td></tr>
<tr><td align="text">• initialMemory<br align="left"/></td></tr>
</table>
> , labelloc=t];
Procedure[label = <
<table border="0">
<tr><td align="text" width="100%">Procedure</td></tr>
<tr><td align="left">• name<br align="left"/></td></tr>
<tr><td align="left">• address<br align="left"/></td></tr>
<tr><td align="left">• blocks<br align="left"/></td></tr>
</table>
> , labelloc=t];
Block[label = <
<table border="0">
<tr><td align="text" width="100%">Block</td></tr>
<tr><td align="left">• label<br align="left"/></td></tr>
<tr><td align="left">• address<br align="left"/></td></tr>
<tr><td align="left">• statements<br align="left"/></td></tr>
<tr><td align="left">• jumps<br align="left"/></td></tr>
</table>
> , labelloc=t];
Statement[label = <
<table border="0" valign="top">
<tr><td align="text" width="100%">Statement</td></tr>
<tr><td align="left" width="100%">• modifies<br align="left"/></td></tr>
<tr><td align="left">• locals<br align="left"/></td></tr>
</table>
> , labelloc=t];
Jump[label = <
<table border="0" valign="top">
<tr><td align="text" width="100%">Jump</td></tr>
<tr><td align="left" width="100%">• modifies<br align="left"/></td></tr>
<tr><td align="left">• locals<br align="left"/></td></tr>
<tr><td align="left">• calls<br align="left"/></td></tr>
</table>
> , labelloc=t];
MemorySection[label = <
<table border="0" valign="top">
<tr><td align="text" width="100%">MemorySection</td></tr>
<tr><td align="left" width="100%">• name<br align="left"/></td></tr>
<tr><td align="left">• address<br align="left"/></td></tr>
<tr><td align="left">• size<br align="left"/></td></tr>
<tr><td align="left">• bytes<br align="left"/></td></tr>
</table>
> , labelloc=t];
}
digraph CfgNodes {
/* Styles */
node[shape=box, fixedsize="True", width="2.2", height="1"];
graph[splines=ortho]
/* Node Groups */
CfgNode[group=g1];
CfgNodeWithData[group=g1];
CfgFunctionEntryNode[group=g2];
CfgCommandNode[group=g3];
/* Relations */
CfgNode -> CfgNodeWithData [minlen=2];
CfgNodeWithData -> CfgFunctionEntryNode
CfgNodeWithData -> CfgFunctionExitNode
CfgNodeWithData -> CfgCommandNode [minlen = 2]
CfgCommandNode -> CfgStatementNode
CfgCommandNode -> CfgJumpNode
CfgCommandNode -> CfgGhostNode
CfgNode -> CfgCallReturnNode
CfgNode -> CfgCallNoReturnNode
CfgNode -> CfgProcedureReturnNode
}
digraph CfgEdges {
/* Styles */
node[shape=box, fixedsize="True", width="2.2", height="1"];
graph[splines=ortho]
/* Relations */
CfgEdge -> RegularEdge;
CfgEdge -> IntraprocEdge;
CfgEdge -> InterprocEdge;
InterprocEdge -> InlineEdge;
InterprocEdge -> InterprocCallEdge;
}