Skip to content

Commit

Permalink
Grammar refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
gretadolcetti committed Feb 14, 2024
1 parent 56fddbe commit 7d0427c
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 81 deletions.
69 changes: 34 additions & 35 deletions src/main/antlr/EVMBLexer.g4
Original file line number Diff line number Diff line change
Expand Up @@ -269,129 +269,129 @@ PUSH1
;

PUSH2
: 'PUSH2' Head Hexs Hexs
: 'PUSH2' Head Hexs
;

PUSH3
: 'PUSH3' Head Hexs Hexs Hexs
: 'PUSH3' Head Hexs
;

PUSH4
: 'PUSH4' Head Hexs Hexs Hexs Hexs
: 'PUSH4' Head Hexs
;

PUSH5
: 'PUSH5' Head Hexs Hexs Hexs Hexs Hexs
: 'PUSH5' Head Hexs
;

PUSH6
: 'PUSH6' Head Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH6' Head Hexs
;

PUSH7
: 'PUSH7' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH7' Head Hexs
;

PUSH8
: 'PUSH8' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH8' Head Hexs
;

PUSH9
: 'PUSH9' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH9' Head Hexs
;

PUSH10
: 'PUSH10' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH10' Head Hexs
;

PUSH11
: 'PUSH11' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH11' Head Hexs
;

PUSH12
: 'PUSH12' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH12' Head Hexs
;

PUSH13
: 'PUSH13' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH13' Head Hexs
;

PUSH14
: 'PUSH14' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH14' Head Hexs
;

PUSH15
: 'PUSH15' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH15' Head Hexs
;

PUSH16
: 'PUSH16' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH16' Head Hexs
;

PUSH17
: 'PUSH17' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH17' Head Hexs
;

PUSH18
: 'PUSH18' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH18' Head Hexs
;

PUSH19
: 'PUSH19' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH19' Head Hexs
;

PUSH20
: 'PUSH20' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH20' Head Hexs
;

PUSH21
: 'PUSH21' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH21' Head Hexs
;

PUSH22
: 'PUSH22' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH22' Head Hexs
;

PUSH23
: 'PUSH23' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH23' Head Hexs
;

PUSH24
: 'PUSH24' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH24' Head Hexs
;

PUSH25
: 'PUSH25' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH25' Head Hexs
;

PUSH26
: 'PUSH26' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH26' Head Hexs
;

PUSH27
: 'PUSH27' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH27' Head Hexs
;

PUSH28
: 'PUSH28' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH28' Head Hexs
;

PUSH29
: 'PUSH29' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH29' Head Hexs
;

PUSH30
: 'PUSH30' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH30' Head Hexs
;

PUSH31
: 'PUSH31' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH31' Head Hexs
;

PUSH32
: 'PUSH32' Head Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs Hexs
: 'PUSH32' Head Hexs
;

DUP1
: 'DUP1'
;
Expand Down Expand Up @@ -653,10 +653,9 @@ fragment Hex
;

fragment Hexs
: Hex Hex
: Hex+
;

WS
: [ \n\t\r] -> skip
;

92 changes: 49 additions & 43 deletions src/main/java/it/unipr/frontend/EVMFrontend.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ public class EVMFrontend {
/**
* TODO: Refactor these strings and understand if they are still needed.
*/
private static String FROM_0417_TO_058 = "a165627a7a72305820";
private static String FROM_0417_TO_058_EXPERIMENTAL = "a265627a7a72305820";
private static String FROM_059_TO_0511 = "a265627a7a72305820";
private static String FROM_059_TO_0511_EXPERIMENTAL = "a365627a7a72305820";
private static String FROM_0512_TO_0515 = "a265627a7a72315820";
private static String FROM_0512_TO_0515_EXPERIMENTAL = "a365627a7a72315820";
private static String FROM_060_TO_061 = "a264697066735822";
private static String FROM_062_TO_LATEST = "a264697066735822";
// private static String FROM_0417_TO_058 = "a165627a7a72305820";
// private static String FROM_0417_TO_058_EXPERIMENTAL = "a265627a7a72305820";
// private static String FROM_059_TO_0511 = "a265627a7a72305820";
// private static String FROM_059_TO_0511_EXPERIMENTAL = "a365627a7a72305820";
// private static String FROM_0512_TO_0515 = "a265627a7a72315820";
// private static String FROM_0512_TO_0515_EXPERIMENTAL = "a365627a7a72315820";
// private static String FROM_060_TO_061 = "a264697066735822";
// private static String FROM_062_TO_LATEST = "a264697066735822";

/**
* Verifies the syntactic correctness of the smart contract bytecode stored
Expand Down Expand Up @@ -95,50 +95,55 @@ public static boolean parseContractFromEtherscan(String address, String output)

for (int i = 2; i < bytecode.length(); i += 2) {

if (bytecode.substring(i, (i + 18)).equals(FROM_0417_TO_058)
|| bytecode.substring(i, (i + 18)).equals(FROM_0417_TO_058_EXPERIMENTAL)
|| bytecode.substring(i, (i + 18)).equals(FROM_059_TO_0511)
|| bytecode.substring(i, (i + 18)).equals(FROM_059_TO_0511_EXPERIMENTAL)
|| bytecode.substring(i, (i + 18)).equals(FROM_0512_TO_0515)
|| bytecode.substring(i, (i + 18)).equals(FROM_0512_TO_0515_EXPERIMENTAL)
|| bytecode.substring(i, (i + 16)).equals(FROM_060_TO_061)
|| bytecode.substring(i, (i + 16)).equals(FROM_062_TO_LATEST)) {

writer.close();
return true;
}
// if (bytecode.substring(i, (i + 18)).equals(FROM_0417_TO_058)
// || bytecode.substring(i, (i + 18)).equals(FROM_0417_TO_058_EXPERIMENTAL)
// || bytecode.substring(i, (i + 18)).equals(FROM_059_TO_0511)
// || bytecode.substring(i, (i + 18)).equals(FROM_059_TO_0511_EXPERIMENTAL)
// || bytecode.substring(i, (i + 18)).equals(FROM_0512_TO_0515)
// || bytecode.substring(i, (i + 18)).equals(FROM_0512_TO_0515_EXPERIMENTAL)
// || bytecode.substring(i, (i + 16)).equals(FROM_060_TO_061)
// || bytecode.substring(i, (i + 16)).equals(FROM_062_TO_LATEST)) {
//
// writer.close();
// return true;
// }

String opcode = bytecode.substring(i, i + 2);

int t = pushTest(opcode);

if (t != 0) {
String push = bytecode.substring(i + 2, (i + 2 + 2 * t));

for (int j = i + 2; j < (i + 2 + 2 * t); j += 2) {

if (bytecode.substring(j, (j + 18)).equals(FROM_0417_TO_058)
|| bytecode.substring(j, (j + 18)).equals(FROM_0417_TO_058_EXPERIMENTAL)
|| bytecode.substring(j, (j + 18)).equals(FROM_059_TO_0511)
|| bytecode.substring(j, (j + 18)).equals(FROM_059_TO_0511_EXPERIMENTAL)
|| bytecode.substring(j, (j + 18)).equals(FROM_0512_TO_0515)
|| bytecode.substring(j, (j + 18)).equals(FROM_0512_TO_0515_EXPERIMENTAL)
|| bytecode.substring(j, (j + 16)).equals(FROM_060_TO_061)
|| bytecode.substring(j, (j + 16)).equals(FROM_062_TO_LATEST)) {

writer.close();
return true;
}
}
String push;
int offset = (i + 2 + 2 * t);
if (offset > bytecode.length()) {
push = bytecode.substring(i + 2);
} else
push = bytecode.substring(i + 2, (i + 2 + 2 * t));

// for (int j = i + 2; j < (i + 2 + 2 * t); j += 2) {
//
// if (bytecode.substring(j, (j + 18)).equals(FROM_0417_TO_058)
// || bytecode.substring(j, (j + 18)).equals(FROM_0417_TO_058_EXPERIMENTAL)
// || bytecode.substring(j, (j + 18)).equals(FROM_059_TO_0511)
// || bytecode.substring(j, (j + 18)).equals(FROM_059_TO_0511_EXPERIMENTAL)
// || bytecode.substring(j, (j + 18)).equals(FROM_0512_TO_0515)
// || bytecode.substring(j, (j + 18)).equals(FROM_0512_TO_0515_EXPERIMENTAL)
// || bytecode.substring(j, (j + 16)).equals(FROM_060_TO_061)
// || bytecode.substring(j, (j + 16)).equals(FROM_062_TO_LATEST)) {
//
// writer.close();
// return true;
// }
// }

addPush(push, t, writer);
i += 2 * t;
}

else {
addOpcode(opcode, writer);
addOpcode(opcode, writer);
}
}
}

writer.close();

Expand Down Expand Up @@ -367,7 +372,9 @@ private static void addOpcode(String opcode, Writer writer) throws IOException {
break;
case "49":
case "4f":
writer.write("INVALID\n");
writer.write(""
+ ""
+ "\n");
break;
case "50":
writer.write("POP\n");
Expand Down Expand Up @@ -545,14 +552,13 @@ private static void addOpcode(String opcode, Writer writer) throws IOException {
break;
case "fe":
writer.write("INVALID\n");
break;
case "ff":
writer.write("SELFDESTRUCT\n");
break;
default:
writer.write("'" + opcode + "'" + "(Unknown Opcode)\n");
break;
}
}
}

private static int pushTest(String opcode) {
Expand Down Expand Up @@ -697,4 +703,4 @@ private static boolean errorInResponse(String content) {
return false;
}
}
}
}
6 changes: 3 additions & 3 deletions src/test/java/it/unipr/analysis/cron/EVMBytecodeTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,14 @@ public class EVMBytecodeTest extends EVMBytecodeAnalysisExecutor {
private final static boolean APPEND = true;

// Regenerates the smart contracts source code in the case
private final static boolean REGENERATE = false;
private final static boolean REGENERATE = true;

// Path
private final String STATISTICS_FULLPATH = ACTUAL_RESULTS_DIR + "/statistics.csv";
private final String STATISTICSZEROJUMP_FULLPATH = ACTUAL_RESULTS_DIR + "/statisticsZeroJumps.csv";
private final String FAILURE_FULLPATH = ACTUAL_RESULTS_DIR + "/failure.csv";
private final String LOGS_FULLPATH = ACTUAL_RESULTS_DIR + "/logs.txt";
private final String SMARTCONTRACTS_FULLPATH = "benchmark/ethersolve-comparison.txt";
private final String SMARTCONTRACTS_FULLPATH = "benchmark/new-bench100.txt";

// Statistics
private int numberOfAPIEtherscanRequest = 0;
Expand All @@ -59,12 +59,12 @@ public class EVMBytecodeTest extends EVMBytecodeAnalysisExecutor {
private final int CORES = Runtime.getRuntime().availableProcessors();
private long startOfExecutionTime = 0;

@Test
public void testSCFromEtherscan() throws Exception {
String SC_ADDRESS = "0xD4Abd907Bfead0825FE21631A4dC5B99C6fA8875";
toFileStatistics(newAnalysis(SC_ADDRESS).toString());
}

@Test
public void testEVMBytecodeAnalysisMultiThread() throws Exception {
clean();
startOfExecutionTime = System.currentTimeMillis();
Expand Down

0 comments on commit 7d0427c

Please sign in to comment.