# Program ```cpp #include "../lib.h" extern "C" EXPORT("wasm_module") int wasm_module(void) { int x = 0; fail_start_trace(); fail_stop_trace(); if (x == 0) { PRINT("result correct.\n"); fail_marker_positive(); return 0; } else { PRINT("result incorrect.\n"); fail_marker_negative(); return 1; } } ``` # Program Disassembly ```objdump 0010001a : #ifdef TARGET_LINUX #include #endif void fail_start_trace(void) {} 10001a: 55 push ebp 10001b: 89 e5 mov ebp,esp 10001d: 90 nop 10001e: 5d pop ebp 10001f: c3 ret 0010003e : int wasm_module(void); MAIN { 10003e: 55 push ebp 10003f: 89 e5 mov ebp,esp 100041: 83 ec 18 sub esp,0x18 int retval = wasm_module(); 100044: e8 94 00 00 00 call 1000dd 100049: 89 45 f4 mov DWORD PTR [ebp-0xc],eax PRINT_SUCCESS("wasm_module returned %d.\n", retval); RET(retval); 10004c: 90 nop } 10004d: c9 leave 10004e: c3 ret 001000dd : #include "../lib.h" extern "C" EXPORT("wasm_module") int wasm_module(void) { 1000dd: 55 push ebp 1000de: 89 e5 mov ebp,esp 1000e0: 83 ec 18 sub esp,0x18 int x = 0; 1000e3: c7 45 f4 00 00 00 00 mov DWORD PTR [ebp-0xc],0x0 fail_start_trace(); 1000ea: e8 2b ff ff ff call 10001a fail_stop_trace(); 1000ef: e8 2c ff ff ff call 100020 if (x == 0) { 1000f4: 83 7d f4 00 cmp DWORD PTR [ebp-0xc],0x0 1000f8: 75 0c jne 100106 PRINT("result correct.\n"); fail_marker_positive(); 1000fa: e8 27 ff ff ff call 100026 return 0; 1000ff: b8 00 00 00 00 mov eax,0x0 100104: eb 0a jmp 100110 } else { PRINT("result incorrect.\n"); fail_marker_negative(); 100106: e8 21 ff ff ff call 10002c return 1; 10010b: b8 01 00 00 00 mov eax,0x1 } } ``` # Query ```sql SELECT v.benchmark, p.known_outcome, oi.disassemble AS inject_disasm, p.injection_instr_absolute AS inject_addr, p.injection_instr AS inject_instr, o1.disassemble AS instr1_disasm, t.instr1_absolute AS instr1_addr, t.instr1 AS instr1, o2.disassemble AS instr2_disasm, t.instr2_absolute AS instr2_addr, t.instr2 AS instr2 FROM fsppilot p JOIN variant v ON v.id = p.variant_id LEFT JOIN trace t ON t.variant_id = p.variant_id AND t.instr2 = p.instr2 AND t.data_physical_address = p.data_physical_address LEFT JOIN objdump oi ON oi.variant_id = p.variant_id AND oi.instr_address = p.injection_instr_absolute LEFT JOIN objdump o1 ON o1.variant_id = p.variant_id AND o1.instr_address = t.instr1_absolute LEFT JOIN objdump o2 ON o2.variant_id = p.variant_id AND o2.instr_address = t.instr2_absolute WHERE p.known_outcome = 1 ORDER BY v.benchmark, p.variant_id, p.id; ``` # Result |benchmark|known_outcome|inject_disasm |inject_addr|inject_instr|instr1_disasm|instr1_addr|instr1|instr2_disasm |instr2_addr|instr2| |---------|-------------|----------------|-----------|------------|-------------|-----------|------|----------------|-----------|------| |mem |1 |push %ebp |10001A |0 | | |0 |push %ebp |10001A |0 | |regs |1 |mov %esp,%ebp|10001B |1 |push %ebp |10001A |1 |mov %esp,%ebp|10001B |1 |