23.11.2013 Views

Obfuscation of Abstract Data-Types - Rowan

Obfuscation of Abstract Data-Types - Rowan

Obfuscation of Abstract Data-Types - Rowan

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

CHAPTER 2. OBFUSCATIONS FOR INTERMEDIATE LANGUAGE 39<br />

irred jump(replace vertex(Jump,Branch) : nil):−<br />

exists ({ };<br />

{ }∗<br />

) (entry,Header),<br />

exists ({ };<br />

{ }∗<br />

) (Header,Header),<br />

exists ({ };<br />

{ }∗<br />

) (entry,Before),<br />

exists ({ }<br />

) (Before,Header),<br />

not (exists ({ };<br />

{ }∗<br />

) (Header,Before)),<br />

exists ({ };<br />

{ }∗<br />

) (Header,InLoop),<br />

exists ({ }∗;<br />

{not ( ′ is node (Header)) }<br />

) (InLoop,InLoop),<br />

all ({ }∗;<br />

{ ′ def (X),<br />

X = expr type(localvar( ),int(true,b32))};<br />

{ }<br />

) (entry,Jump),<br />

not (exists ({ };<br />

{ }∗<br />

) (Header,Jump)),<br />

jump cond(X,C),<br />

@vlabel(Jump,instr label(Label,Inst)),<br />

outedges(Jump,Edges),<br />

@fresh label(NewLabel),<br />

@new vertex(instr label(NewLabel : nil,Inst),<br />

Edges,Then),<br />

new edge(Then,ThenEdge),<br />

new edge(InLoop,InLoopEdge),<br />

@new vertex(instr label(Label,branch(cond(C),NewLabel)),<br />

ThenEdge : InLoopEdge : nil,Branch).<br />

Figure 2.10: Code for the irred jump method

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!