%-cov.o: %.c
$(CC) -c $(CFLAGS) $(GCOV_FLAGS) $< -o $@
+WRAPPED = $(shell sed -n 's,^ *WRAP(\([[:alnum:]_]*\));,\1,p' x86-emulate.h)
+
x86-emulate.h: x86_emulate/x86_emulate.h
x86-emulate.o x86-emulate-cov.o: x86-emulate.h x86_emulate/x86_emulate.c
fuzz-emul.o fuzz-emul-cov.o wrappers.o: x86-emulate.h
$(AR) rc $@ $^
afl-harness: afl-harness.o fuzz-emul.o x86-emulate.o cpuid.o wrappers.o
- $(CC) $(CFLAGS) $^ -o $@
+ $(CC) $(CFLAGS) $(addprefix -Wl$(comma)--wrap=,$(WRAPPED)) $^ -o $@
afl-harness-cov: afl-harness-cov.o fuzz-emul-cov.o x86-emulate-cov.o cpuid.o wrappers.o
- $(CC) $(CFLAGS) $(GCOV_FLAGS) $^ -o $@
+ $(CC) $(CFLAGS) $(GCOV_FLAGS) $(addprefix -Wl$(comma)--wrap=,$(WRAPPED)) $^ -o $@
# Common targets
.PHONY: all
#include <stdarg.h>
-#define WRAP(x) typeof(x) emul_##x
+#define WRAP(x) typeof(x) __wrap_ ## x, __real_ ## x
#include "x86-emulate.h"
-size_t emul_fwrite(const void *src, size_t sz, size_t n, FILE *f)
+size_t __wrap_fwrite(const void *src, size_t sz, size_t n, FILE *f)
{
emul_save_fpu_state();
- sz = fwrite(src, sz, n, f);
+ sz = __real_fwrite(src, sz, n, f);
emul_restore_fpu_state();
return sz;
}
-int emul_memcmp(const void *p1, const void *p2, size_t sz)
+int __wrap_memcmp(const void *p1, const void *p2, size_t sz)
{
int rc;
emul_save_fpu_state();
- rc = memcmp(p1, p2, sz);
+ rc = __real_memcmp(p1, p2, sz);
emul_restore_fpu_state();
return rc;
}
-void *emul_memcpy(void *dst, const void *src, size_t sz)
+void *__wrap_memcpy(void *dst, const void *src, size_t sz)
{
emul_save_fpu_state();
- memcpy(dst, src, sz);
+ __real_memcpy(dst, src, sz);
emul_restore_fpu_state();
return dst;
}
-void *emul_memset(void *dst, int c, size_t sz)
+void *__wrap_memset(void *dst, int c, size_t sz)
{
emul_save_fpu_state();
- memset(dst, c, sz);
+ __real_memset(dst, c, sz);
emul_restore_fpu_state();
return dst;
}
-int emul_printf(const char *fmt, ...)
+int __wrap_printf(const char *fmt, ...)
{
va_list varg;
int rc;
emul_save_fpu_state();
va_start(varg, fmt);
- rc = vprintf(fmt, varg);
+ rc = __real_vprintf(fmt, varg);
va_end(varg);
emul_restore_fpu_state();
return rc;
}
-int emul_putchar(int c)
+int __wrap_putchar(int c)
{
int rc;
emul_save_fpu_state();
- rc = putchar(c);
+ rc = __real_putchar(c);
emul_restore_fpu_state();
return rc;
}
-int emul_puts(const char *str)
+int __wrap_puts(const char *str)
{
int rc;
emul_save_fpu_state();
- rc = puts(str);
+ rc = __real_puts(str);
emul_restore_fpu_state();
return rc;
}
+
+int __wrap_snprintf(char *buf, size_t n, const char *fmt, ...)
+{
+ va_list varg;
+ int rc;
+
+ emul_save_fpu_state();
+ va_start(varg, fmt);
+ rc = __real_vsnprintf(buf, n, fmt, varg);
+ va_end(varg);
+ emul_restore_fpu_state();
+
+ return rc;
+}
+
+char *__wrap_strstr(const char *s1, const char *s2)
+{
+ char *s;
+
+ emul_save_fpu_state();
+ s = __real_strstr(s1, s2);
+ emul_restore_fpu_state();
+
+ return s;
+}