3.9 KiBLFS
3.9 KiBLFS
Program
#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
0010001a <fail_start_trace>:
#ifdef TARGET_LINUX
#include <stdio.h>
#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 <os_main>:
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 <wasm_module>
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 <wasm_module>:
#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_start_trace>
fail_stop_trace();
1000ef: e8 2c ff ff ff call 100020 <fail_stop_trace>
if (x == 0) {
1000f4: 83 7d f4 00 cmp DWORD PTR [ebp-0xc],0x0
1000f8: 75 0c jne 100106 <wasm_module+0x29>
PRINT("result correct.\n");
fail_marker_positive();
1000fa: e8 27 ff ff ff call 100026 <fail_marker_positive>
return 0;
1000ff: b8 00 00 00 00 mov eax,0x0
100104: eb 0a jmp 100110 <wasm_module+0x33>
} else {
PRINT("result incorrect.\n");
fail_marker_negative();
100106: e8 21 ff ff ff call 10002c <fail_marker_negative>
return 1;
10010b: b8 01 00 00 00 mov eax,0x1
}
}
Query
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 |