simple standalone injection test

This commit is contained in:
Alwin Berger 2024-01-09 15:12:35 +01:00
parent 19f046ef6a
commit 349d96795b
2 changed files with 145 additions and 60 deletions

View File

@ -2,63 +2,114 @@
cd "$(dirname "$0")" cd "$(dirname "$0")"
mkdir -p build mkdir -p build
cd build cd build
../configure --target-list=arm-linux-user,arm-softmmu \ ../configure --cxx=/home/ab/code/FRET/qemu-libafl-bridge/linker_interceptor.py \
--target-list=arm-softmmu \
--disable-slirp \
--enable-fdt=internal \
--audio-drv-list= \ --audio-drv-list= \
--disable-blobs \ --disable-alsa \
--disable-attr \
--disable-auth-pam \
--disable-dbus-display \
--disable-bochs \ --disable-bochs \
--disable-bpf \
--disable-brlapi \ --disable-brlapi \
--disable-bsd-user \ --disable-bsd-user \
--disable-bzip2 \ --disable-bzip2 \
--disable-capstone \
--disable-cap-ng \ --disable-cap-ng \
--disable-canokey \
--disable-cloop \ --disable-cloop \
--disable-cocoa \
--disable-coreaudio \
--disable-curl \ --disable-curl \
--disable-curses \ --disable-curses \
--disable-dmg \ --disable-dmg \
--enable-fdt \ --disable-docs \
--disable-dsound \
--disable-fuse \
--disable-fuse-lseek \
--disable-gcrypt \ --disable-gcrypt \
--disable-gettext \
--disable-gio \
--disable-glusterfs \ --disable-glusterfs \
--disable-gnutls \ --disable-gnutls \
--disable-gtk \ --disable-gtk \
--disable-guest-agent \ --disable-guest-agent \
--disable-guest-agent-msi \
--disable-hax \
--disable-hvf \
--disable-iconv \ --disable-iconv \
--disable-jack \
--disable-keyring \
--disable-kvm \
--disable-libdaxctl \
--disable-libiscsi \ --disable-libiscsi \
--disable-libnfs \ --disable-libnfs \
--disable-libpmem \
--disable-libssh \ --disable-libssh \
--disable-libudev \
--disable-libusb \ --disable-libusb \
--disable-linux-aio \ --disable-linux-aio \
--disable-linux-io-uring \
--disable-linux-user \
--disable-live-block-migration \ --disable-live-block-migration \
--disable-lzfse \
--disable-lzo \ --disable-lzo \
--disable-l2tpv3 \
--disable-malloc-trim \
--disable-mpath \
--disable-multiprocess \
--disable-netmap \
--disable-nettle \ --disable-nettle \
--disable-numa \ --disable-numa \
--disable-nvmm \
--disable-opengl \ --disable-opengl \
--disable-oss \
--disable-pa \
--disable-parallels \ --disable-parallels \
--disable-plugins \ --disable-png \
--disable-pvrdma \
--disable-qcow1 \ --disable-qcow1 \
--disable-qed \ --disable-qed \
--disable-qga-vss \
--disable-rbd \ --disable-rbd \
--disable-rdma \ --disable-rdma \
--disable-replication \ --disable-replication \
--disable-sdl \ --disable-sdl \
--disable-sdl-image \
--disable-seccomp \ --disable-seccomp \
--disable-selinux \
--disable-slirp-smbd \
--disable-smartcard \ --disable-smartcard \
--disable-snappy \ --disable-snappy \
--enable-system \ --disable-sndio \
--disable-sparse \
--disable-spice \
--disable-spice-protocol \
--disable-tools \ --disable-tools \
--disable-tpm \ --disable-tpm \
--disable-usb-redir \ --disable-usb-redir \
--disable-user \
--disable-u2f \
--disable-vde \ --disable-vde \
--disable-vdi \ --disable-vdi \
--disable-vduse-blk-export \
--disable-vhost-crypto \ --disable-vhost-crypto \
--disable-vhost-kernel \ --disable-vhost-kernel \
--disable-vhost-net \ --disable-vhost-net \
--disable-vhost-user \ --disable-vhost-user-blk-server \
--disable-vhost-vdpa \ --disable-vhost-vdpa \
--disable-virglrenderer \ --disable-virglrenderer \
--disable-virtfs \ --disable-virtfs \
--disable-vmnet \
--disable-vnc \ --disable-vnc \
--disable-vnc-jpeg \ --disable-vnc-jpeg \
--disable-vnc-sasl \ --disable-vnc-sasl \
--disable-vte \ --disable-vte \
--disable-vvfat \ --disable-vvfat \
--disable-whpx \
--disable-xen \ --disable-xen \
--disable-xen-pci-passthrough --disable-xen-pci-passthrough \
--disable-xkbcommon \
--disable-zstd \

View File

@ -43,9 +43,43 @@ int qemu_default_main(void)
int (*qemu_main)(void) = qemu_default_main; int (*qemu_main)(void) = qemu_default_main;
#ifndef AS_LIB #ifndef AS_LIB
//========= Instrumentation start
#include <stdio.h>
#include <stdlib.h>
#include "exec/cpu-common.h"
//========= Instrumentation end
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
//========= Instrumentation start
// read addr and input to load
if (argc < 3) {
fprintf(stderr, "Need address and input file argument\n");
exit(1);
}
hwaddr target_addr = (hwaddr) strtoll(argv[1], NULL, 16);
char buffer[4097];
FILE* inputfile = fopen(argv[2], "rb");
if (!inputfile) {
perror("fopen");
exit(1);
}
size_t read_len = fread(buffer, sizeof(char), 4096, inputfile);
buffer[read_len]=0;
if (!read_len) {
fprintf(stderr, "No input in file\n");
exit(1);
}
printf("Load at %lx: %s\n", target_addr, buffer);
// fix arguments for qemu
argv[2]=argv[0];
argv=&argv[2];
argc-=2;
//========= Instrumentation end
qemu_init(argc, argv); qemu_init(argc, argv);
//========= Instrumentation start
// load input
cpu_physical_memory_rw(target_addr, buffer, read_len, true);
//========= Instrumentation end
return qemu_main(); return qemu_main();
} }
#endif #endif