MCPcopy Create free account
hub / github.com/connorjaydunn/BinaryShield / addVmHandlers

Method addVmHandlers

src/vm_section.cpp:43–91  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41}
42
43void VMSection::addVmHandlers()
44{
45 // there is likely an elegant way of doing this
46
47 VMHandler* vmHandlers[] =
48 {
49 new Enter(), new Exit(),
50 new PushR64(), new PushR32(), new PushR16(), new PushR8(),
51 new PopR64(), new PopR32(), new PopR16(), new PopR8(),
52 new PushI64(), new PushI32(), new PushI16(), new PushI8(),
53 new PushRSP64(), new PushRSP32(), new PushRSP16(), new PushRSP8(),
54 new PopRSP64(), new PopRSP32(), new PopRSP16(), new PopRSP8(),
55 new Add64(), new Add32(), new Add16(), new Add8(),
56 new Sub64(), new Sub32(), new Sub16(), new Sub8(),
57 new Xor64(), new Xor32(), new Xor16(), new Xor8(),
58 new And64(), new And32(), new And16(), new And8(),
59 new Or64(), new Or32(), new Or16(), new Or8(),
60 new Nand64(), new Nand32(), new Nand16(), new Nand8(),
61 new Nor64(), new Nor32(), new Nor16(), new Nor8(),
62 new Shl64(), new Shl32(), new Shl16(), new Shl8(),
63 new Read64(), new Read32(), new Read16(), new Read8(),
64 new Write64(), new Write32(), new Write16(), new Write8(),
65 new Jmp(),
66 new Jne(),
67 };
68
69 int vmHandlersSize = std::size(vmHandlers);
70
71 // create vector of indexes we will shuffle
72 // create multiple instances of a single index will result in multiple handler instances
73 std::vector<int> indexes(vmHandlersSize);
74 for (int i = 0; i < vmHandlersSize; i++)
75 {
76 for (int j = 0; j < getRandomInt(15, 30); j++)
77 indexes.push_back(i);
78 }
79
80 // shuffle index array
81 std::random_device rd;
82 std::mt19937 g(rd());
83 std::shuffle(indexes.begin(), indexes.end(), g);
84
85 // generate a random number of handler instances
86 for (int i = 0; i < indexes.size(); i++)
87 addVmHandler(*vmHandlers[indexes[i]]);
88
89 for (int i = 0; i < vmHandlersSize; i++)
90 delete vmHandlers[i];
91}
92
93void VMSection::addVmHandler(VMHandler vmHandler)
94{

Callers

nothing calls this directly

Calls 1

getRandomIntFunction · 0.85

Tested by

no test coverage detected