diff options
| author | Andrea Fioraldi <andreafioraldi@gmail.com> | 2019-09-18 10:22:55 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-09-18 10:22:55 +0200 |
| commit | b55ea6409dfcadf3c43244fb8e72ea660fd4fcc2 (patch) | |
| tree | 8c2a81fde3312449b18cff1ab6ce27432db6e3e2 /afl-wine-trace | |
| parent | 68b3849d51e94e394334305b8ab7e4f613a8bbb9 (diff) | |
| parent | 5e56d3bf368df07d964de769aa5142ad98536330 (diff) | |
| download | afl++-b55ea6409dfcadf3c43244fb8e72ea660fd4fcc2.tar.gz | |
Merge pull request #60 from vanhauser-thc/wine_mode
Wine mode
Diffstat (limited to 'afl-wine-trace')
| -rwxr-xr-x | afl-wine-trace | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/afl-wine-trace b/afl-wine-trace new file mode 100755 index 00000000..fa552051 --- /dev/null +++ b/afl-wine-trace @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 + +import os +import sys +import pefile +import shutil + +if len(sys.argv) < 2: + print("[afl-wine-trace] usage: wine-cov binary [args...]\n") + exit(1) + +if os.getenv("AFL_PATH"): + my_dir = os.getenv("AFL_PATH") +else: + my_dir = os.path.dirname(os.path.abspath(__file__)) + +os.environ["WINELOADERNOEXEC"] = "1" + +pe = pefile.PE(sys.argv[1]) + +os.environ["AFL_ENTRYPOINT"] = "0x%x" % (pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.AddressOfEntryPoint) +if not os.getenv("AFL_INST_LIBS"): + if "AFL_CODE_START" not in os.environ: + os.environ["AFL_CODE_START"] = "0x%x" % (pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.BaseOfCode) + if "AFL_CODE_END" not in os.environ: + os.environ["AFL_CODE_END"] = "0x%x" % (pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.BaseOfCode + pe.OPTIONAL_HEADER.SizeOfCode) + +if os.getenv("WINECOV_QEMU_PATH"): + qemu_path = os.getenv("WINECOV_QEMU_PATH") +elif os.path.exists(os.path.join(my_dir, "afl-qemu-trace")): + qemu_path = os.path.join(my_dir, "afl-qemu-trace") +else: + qemu_path = "qemu-" + if pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_AMD64"] or pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_IA64"]: + qemu_path += "x86_64" + elif pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_I386"]: + qemu_path += "i386" + else: + print ("[afl-wine-trace] unsupported architecture\n") + exit(1) + qemu_path = shutil.which(qemu_path) + +if os.getenv("WINECOV_WINE_PATH"): + wine_path = os.getenv("WINECOV_WINE_PATH") +else: + wine_path = "/usr/lib/wine/wine" + if pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_AMD64"] or pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_IA64"]: + wine_path += "64" + elif pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_I386"]: + pass + else: + print ("[wine-cov] unsuppoted architecture\n") + exit(1) + +os.execve(qemu_path, [qemu_path, wine_path] + sys.argv[1:], os.environ) |
