Research Article
A Detection Approach for Vulnerability Exploiter Based on the Features of the Exploiter
Algorithm 2
JCFG generation algorithm.
| | Input: CFG | | | Output: JCFG | | (1) | JCFG = new JCFG (); / Initialize JCFG / | | (2) | Stack cN = new Stack <> (); / Create a stack to store conditional jumps and path fork nodes / | | (3) | Stack jN = new Stack <> (); / Create a stack to store conditional jumps and path fork nodes / | | (4) | for (int i = 0; i < n; i++) do | | (5) | if (node.instruction.exist (Call)) then | | (6) | JCFGNode = new JCFG (nodeAttrExtract (node.instruction, node.adress)); | | (7) | if (JCFG.exist (JCFGNode)) then | | (8) | Return (cN, jN);/ Return the CFG node of the last forked path, and make the current JCFG node become the CFG node of the last forked path / | | (9) | else | | (10) | JCFGAdd (JCFGNode); | | (11) | end if; | | (12) | else if (instruction.exist (JXX)) then | | (13) | if (node.instruction.exist (jmp)) then | | (14) | JCFGNode = new JCFG (nodeAttrExtract (node.instruction, node.adress)); | | (15) | if (JCFG.exist (JCFGNode)) then | | (16) | Return (cN, jN); | | (17) | else | | (18) | JCFGAdd (JCFGNode); | | (19) | end if; | | (20) | else if (node.instruction.exist (jnz) or node.instruction.exist (jz)) then | | (21) | JCFGNode = new JCFG (nodeAttrExtract (node.instruction, node.address)); | | (22) | if (!JCFG.exist (JCFGNode) or JCFG.second == null) then | | (23) | JCFGAdd (JCFGNode); | | (24) | else | | (25) | Return (cN, jN); | | (26) | end if; | | (27) | end if; | | (28) | end if; | | (29) | end for. |
|