* Removes some deprecated functions, and removes the basic block function cloning apis, in favor of apis on Arch
* More tweaks for removing unnecessary APIs
* Goodbye dse
* Fix issue
* Tweaks
* Remove some annoying logs
* Running clang-format on files with some additional custom scripts for my style
* Fix missing unique_ptr in remill/BC/Optimizer.h
* Fixes and selective disabling of clang-format
* Remove illegal instruction from tests (#205)
The code segment (CS) register cannot be explicitly loaded, unlike the
other segment registers. The instruction `mov cs, rax` is thus illegal,
and triggered a SIGILL for each test case, causing all tests to
spuriously succeed.
* Remove unneeded DS register preservation around test cases
The commit that first added this included an illegal instruction, which
caused false positives and hid the fact that this is redundant.
* Revert "Restore previously failing FMA tests"
This reverts commit 9a9f370d08.
The bug in #205 is what made it seem like the underlying issue here had
been addressed.
* Include segment registers in `SaveState()`
* If in 32-bit mode, check if we should zero out x87 CS
* Implements more accurate tracking of x87 exception flags, last instruction pointer, last data pointer, and floating point instruction opcode.
* Fix that masks out the MXCSR register from being compared at the end of tests. We don't yet have good enough info to do this well. Moves the FCMOV instruction set to be under the purview of X87.cpp and its tests.
* Tests should pass now.
* Addressing issues Mike mentioned.
* Adds in explicit tracking of the FPU control word into the State structure. This change helps make sure that VMill can initialize the FPU rounding modes correctly during its emulation. The AArch64 State struct already includes the fpcr.
* Update State.h
* Change copyright notice in all the places. Trying to get cmake to download all the things
* CMake refactor
* Added the lib repository installer
* Fixed a couple of paths in library repository scripts
* Spelling and a missing .gitignore file.
* The google test library was not correctly linked
* Removed the pre-compiled XED library
* Removed unused files; fixed the INSTALL directives. Added automatic protobuf generation.
* Added a package generator script for ArchLinux
* Merged in Alessandro's cmake magic
* Cleanups, compatibility changes
* CMake cleanup.
o Removed the cmake folder as it is no longer used.
o Removed the library_repository_installer directory and
replaced it with a submodule to the newly introduced
cxx_common repository.
o Added the 'use_remill_semantics' branch of mcsema as a
submodule under tools/cmake.
o Updated the README instructions (added --recursive to the
git clone command).
Warning: the mcsema submodule is pointing to my fork of the
repository!
* CMake: avoid re-defining the C/CXX/ASM compiler.
This will prevent CMake from looping forever when using submodules.
* The tools/mcsema submodule now points to the official repository.
* mcsema submodule update
* Updated the mcsema git submodule to track the newest changes.
* Various CMake fixes (see details).
o External include headers were not correctly marked
as SYSTEM. This caused them to output warnings and
break the build.
o The PROJECT_SOURCE CMake variable has been replaced
with CMAKE_SOURCE_DIR.
o Updated the mcsema submodule to point to the latest
CMake fixes.
* Getting closer to having the test case runner work again without using the CFG protobufs.
* Trying to make things use ubuntu clang/llvm packages
* Update to the mcsema submodule.
* Minor changes for llvm version compatibility
* Test cases should run now. Had to compile the lifted testcases to a .S file, as with the .bc file, they were being optimized away.. I think. The compilation to assembly seems unusually slow, though.
* Minor change
* Some stuff for llvm 4.0 support
* Remove mcsema sub-module
* Remove cxx-common submodule
* First steps toward getting travis working again
* Attempt at getting travis working again
* Using https for cloning instead of ssh
* Minor build script update
* Added ISEL_ prefix to isels to make it easier for ForEachISel to find them. Commented out the defer_inlining intrinsics.
* Changes related to mcsema2
* Simplify runtime targets generation. (#110)
* CMake refactor: Added a new language 'BC' for the bitcode (see details).
The language is used to generate the runtimes used by the architecture
modules. The required executables (clang++ and llvm-link) are
automatically detected in the same way as other compilers are.
A new CMake function has been added and it can be used to easily
generate runtime targets in a way similar to add_executable:
add_runtime(<name> SOURCE <source list> ADDRESS_SIZE <n>
DEFINITIONS <definition list>)
Additionally, all files ending with the *.bcpp extensions will
automatically invoke the bitcode compiler when listed in an
active target.
This should open support for parallel compilation! You just have to
list all your .cpp files when calling add_runtime.
* CMake: Fixes to the BC language handler.
* CMake/BC: Use '.bo' for object files. X86 runtime: Add -g/-O flags.
* Initial commit of x86 program snapshotter. Haven't yet figured out how to save a core dump to a specific file.
Now finds and saves core dumps (in a sketchy way).
Kind of but didn't really fix remill-disass with core dumps. It almost seems like a bunch of stuff is missing from within a core dump. It may be the case that it will be simpler to use binary ninja directly on snapshot files.
Working toward the executor.
Have snapshot creation and loading working. Next up: decoding the first few instructions!
Starting to serverize remill and setting up lines of communicating between vmill and remill. Going to move on to finally implementing remill-opt.
Changed a bazillon things.
Fixed the dead register backward data-flow analysis.
Fixed soem bugs, added GEP re-association, working toward inserting stores that will kill values.
Got interprocedual dead store elimination working! :-D
Finally...dead store elimination
remill-opt is done.
Added Lifter interface
Spec'ing out the translation engine.
Got the dynamic decoder working!
Got bitcode caching working
Added caching layer for bytecode compilation.
Decided on how to access reg state and allocas in functions. The bytecode will treat the state struct and the alloca'd data as a contiguous, opaque, byte-addressible area.
Compiler seems to work
Refactor
Great progress...goodnight
Made it up to the first syscall
Fixed call to a hypercall intrinsics
Bug fixes, minor change to the CFG proto.
Refacotorings and changes
* Switching to trying nativeexec, and made memory32 map snapshot into low 32-bits of address space, preserving original addresses of program.
* About to make some interesting changes, so save save save
* Refactor done, now time to produce shared libraries
* Got initial execution of some stuff in PHP working.. it either seems like the code is in an infinite loop, or just horribly slow, not sure. Otherwise, amazing progress.
* Got initial compiling to a runtime dynamic library working
* Separated most DEF_ISEL_SEMs and tests still pass. Goodnight!
* Got incremental optimization and compilation working.
* Got caching of the bitcode file to disk working and periodically collapsing the shared libraries into a single library. OUT.
* Fixed some bugs
* Commit before the storm
* Made the JIT work again, still not that fast though.
* Minor logging fix
* Log an error that we're executing a missing instruction.
* JIT compile the whole module first, then incrementally JIT compile function partitions. Also, link in libm.
* Added new syscall
* Added breakpoint sync hypercall, useful for testing.
* Got a php5.4 unserialize bug to reproduce. Added remill-pinshot, which will use PIN to take a snapshot and print out a register trace. This is useful for debugging divergences. Fixed up the semantics of some instructions, and added semantics and tests for PSRLDQ.
* Simplifications to remill that removes all the various basic block arrays, and uses meta-data instead.
* Made cmake take over the test system
* Working on mega refactor to eventually permit klee support
* Made all semantics code return memory pointer; I think this makes LLVM's optimizer a bit happier. Made the __remill_sub_N things into global constants, referencing the actual functions, that have private linkage. Slowly getting back in the direction of execution. I've got some bitcode translation working (with a hard-coded address for my local php version). The address space stuff seems to work so far.
* Missing files.
* Other minor fixes
* rtti-related fixes for gtest
* minor travis config change
* minor travis config change
* sendfile no longer needed
* Disable building vmill on non-linux platforms
* Disable 32-bit test builds on macOS.
* Trying to get symbol names on mac right.
* Minor fix to save state code for tests, disable testing on macOS builds because of symbol mismatches in gtest.
* Fixup remill-disass to use the simplified proto structure. Something may be wrong with remill-opt, or installing remill opt. Remove caching from travis.
Added more constraints on the packing of the State (sub)structures.
Trying to figure out why the x86 tests fail. Issue seems to be that they are operating on the FPU IP at the machine code level, but appear to be correctly operating on edi/esi at the bitcode level.