hack main.c to measure instructions
This commit is contained in:
parent
9a0a6ebc35
commit
ccc7d889c4
11
README_icount.txt
Normal file
11
README_icount.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# dependencies
|
||||||
|
nix-shell
|
||||||
|
# build qemu
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
../myconfigureunsared.sh
|
||||||
|
make -j 8
|
||||||
|
# prepare img
|
||||||
|
qemu-img create -f qcow2 dummy.qcow2 32M
|
||||||
|
# run
|
||||||
|
./qemu-system-arm 12a0 1404 -machine mps2-an385 -cpu cortex-m3 -kernel kernel.elf -serial none -icount shift=5,align=off,sleep=on -monitor none -nographic
|
@ -37,7 +37,6 @@ cd build
|
|||||||
--disable-gtk \
|
--disable-gtk \
|
||||||
--disable-guest-agent \
|
--disable-guest-agent \
|
||||||
--disable-guest-agent-msi \
|
--disable-guest-agent-msi \
|
||||||
--disable-hax \
|
|
||||||
--disable-hvf \
|
--disable-hvf \
|
||||||
--disable-iconv \
|
--disable-iconv \
|
||||||
--disable-jack \
|
--disable-jack \
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qemu-main.h"
|
#include "qemu-main.h"
|
||||||
|
#include "sysemu/runstate.h"
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
|
|
||||||
#ifdef CONFIG_SDL
|
#ifdef CONFIG_SDL
|
||||||
@ -47,6 +48,9 @@ int (*qemu_main)(void) = qemu_default_main;
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "exec/cpu-common.h"
|
#include "exec/cpu-common.h"
|
||||||
|
void libafl_qemu_set_native_breakpoint( vaddr );
|
||||||
|
void libafl_qemu_remove_native_breakpoint( vaddr );
|
||||||
|
int64_t icount_get_raw(void);
|
||||||
//========= Instrumentation end
|
//========= Instrumentation end
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -56,20 +60,23 @@ int main(int argc, char **argv)
|
|||||||
fprintf(stderr, "Need address and input file argument\n");
|
fprintf(stderr, "Need address and input file argument\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
hwaddr target_addr = (hwaddr) strtoll(argv[1], NULL, 16);
|
hwaddr start = (hwaddr) strtoll(argv[1], NULL, 16);
|
||||||
char buffer[4097];
|
hwaddr end = (hwaddr) strtoll(argv[2], NULL, 16);
|
||||||
FILE* inputfile = fopen(argv[2], "rb");
|
// hwaddr target_addr = (hwaddr) strtoll(argv[1], NULL, 16);
|
||||||
if (!inputfile) {
|
// vm_start();
|
||||||
perror("fopen");
|
// char buffer[4097];
|
||||||
exit(1);
|
// FILE* inputfile = fopen(argv[2], "rb");
|
||||||
}
|
// if (!inputfile) {
|
||||||
size_t read_len = fread(buffer, sizeof(char), 4096, inputfile);
|
// perror("fopen");
|
||||||
buffer[read_len]=0;
|
// exit(1);
|
||||||
if (!read_len) {
|
// }
|
||||||
fprintf(stderr, "No input in file\n");
|
// size_t read_len = fread(buffer, sizeof(char), 4096, inputfile);
|
||||||
exit(1);
|
// buffer[read_len]=0;
|
||||||
}
|
// if (!read_len) {
|
||||||
printf("Load at %lx: %s\n", target_addr, buffer);
|
// fprintf(stderr, "No input in file\n");
|
||||||
|
// exit(1);
|
||||||
|
// }
|
||||||
|
// printf("Load at %lx: %s\n", target_addr, buffer);
|
||||||
// fix arguments for qemu
|
// fix arguments for qemu
|
||||||
argv[2]=argv[0];
|
argv[2]=argv[0];
|
||||||
argv=&argv[2];
|
argv=&argv[2];
|
||||||
@ -78,7 +85,17 @@ int main(int argc, char **argv)
|
|||||||
qemu_init(argc, argv);
|
qemu_init(argc, argv);
|
||||||
//========= Instrumentation start
|
//========= Instrumentation start
|
||||||
// load input
|
// load input
|
||||||
cpu_physical_memory_rw(target_addr, buffer, read_len, true);
|
// cpu_physical_memory_rw(target_addr, buffer, read_len, true);
|
||||||
|
libafl_qemu_set_native_breakpoint(start);
|
||||||
|
vm_start();
|
||||||
|
qemu_main_loop();
|
||||||
|
libafl_qemu_remove_native_breakpoint(start);
|
||||||
|
libafl_qemu_set_native_breakpoint(end);
|
||||||
|
printf("Start: %lu\n", icount_get_raw());
|
||||||
|
vm_start();
|
||||||
|
qemu_main_loop();
|
||||||
|
printf("End: %lu\n", icount_get_raw());
|
||||||
|
return 0;
|
||||||
//========= Instrumentation end
|
//========= Instrumentation end
|
||||||
return qemu_main();
|
return qemu_main();
|
||||||
}
|
}
|
||||||
|
@ -724,9 +724,9 @@ static bool main_loop_should_exit(int *status)
|
|||||||
vm_stop(RUN_STATE_DEBUG);
|
vm_stop(RUN_STATE_DEBUG);
|
||||||
|
|
||||||
//// --- Begin LibAFL code ---
|
//// --- Begin LibAFL code ---
|
||||||
#ifdef AS_LIB
|
// #ifdef AS_LIB // Also exit in standalone mode for debugging
|
||||||
return true; // exit back to fuzzing harness
|
return true; // exit back to fuzzing harness
|
||||||
#endif
|
// #endif
|
||||||
//// --- End LibAFL code ---
|
//// --- End LibAFL code ---
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user