* Add explicit targets to unit tests from src
* run_tests.py no longer crashes when program does not generate expected file as output.
* Fix bunch of issues if file is not lifted/recompiled properly
* Gzip empty command line arguments test case
* Parse flavors
* Batch folder is now created/deleted properly
* Shared libraries as symlinks in special dir
* Simple README file
* Get binary info
* Simple cfg retrieval
* Lifter has path to cfg as argument
* Flags for eventual evaluation
* Check policy and presence of cfg file
* Print results of getting the cfgs
* Check of batch sanity fix
* run_test cli parsing
* Add abi_libraries directory parsing
* Shared libraries directory parsing
* Lift and recompile
* Before actual test implementation
* Playground for testing
* Actual testing
* Split test cases on per binary bases
* Add some commits
* Result print
* Enhance README.txt
* Populate.py to copy needed binaries
* Add short decsription of populate.py
* Support flavor all
* add ida frontend implementation
* Basic tag files
* Basic inputs
* Missing comma
* Change inputs handling
* Separate function for copy files
* Naming convention
* Handle missing test case class
* Create bin if it is missing
* Create so_dir if it is missing
* Remove not used cmd argument
* Add several more test_suites
* ida frontend lift function can now be selected
* Smarter tests
* BasicTest does not need setUp
* Prevent system-wide installed binaries from being run instead of tested
* Simple comment
* Pass rest of are passed to lift
* Fix parser error with unspecified lift_args
* Variable name
* Change default interpreter to python3
* Fix optional argument parsing for the subsequent lift
* typo in mcsema-disass
* More details in README
* Simplify usage of IDA frontend
* ida frontend stores logs
* Add script to compile programs and generate tags if desired
* Year on copyright
* Add hello world src examples of tests.
* Add test addition example to README
* Correct extension for log files
* Basic linker flags
* Fix crash if file in bin is missing when tag is present
* Bunch of test files
* Empty runs
* Test_suite name should have maxsplit=1
* Dynamically create test_suites for src programs from definitions
* Define cases
* Stdin
* Split tests into another file
* WIP: stdin from string
* Another string to be matched if binary is pie
* Fix typo in test case
* Add color support
* Improve stdout output
* Add wrappers to make colors more use friendly
* Move object representation of test results into separate file
* Add magneta
* Cleaner verbose output
* Log partial results, so they can be dumped into file later for comparison
* Replace usage of internals of color.Colors
* Refactor how constants are hidden in Colors
* Add load/save test results into json
* Simple printer of multiple results
* result_data.compare() now takes formatter as argument which handles all printing
* result_data compare() code cleanup
* Missing closing bracket in get_cfg
* Test cases now correctly process stdin
* Add option to save log as json
* Move global variable input_dir into correct module
* Add missing suites for files compiled from sources
* Compile does not crash when tags are not being stubbed
* Fix passing stdin into Popen - input is bytes instead of str
* Some tests no longer print floats
* populate: Add color support
* run_tests: Multithread support
* run_tests: Introduces option to specify number of threads to use
* get_cfg: Introduces option to specify number of threads to use
* Update README with compile.py information
* Change --lib_dir to --runtime_lib to avoid llvm version problems
* WIP: Set default compiler to clang-8
* Logs are now stored inside batch_name_cfg/logs
* Fix bug in log file filename generation
* get_cfg: If all is specified as flavor, even empty tag files are selected
* Changed run_tests.py --libc_dir to --abi_lib_dir to match mcsema-lift naming conventions
* run_test: Timeout is now set to 5sec per test
* run_tests: timeout is static attribute of BaseTest.
* run_tests: Expand grep tests
* run_tests: timeout is now logged as type of test result
* src: Add test for global ctors/dtors.
* src: Compile script can now use user-defined compilators
* run: Add runners for global ctor/dtor tests.
* compile: TAGS can now be specified as first line in src file
* src: Add TAGS to source files
* compile: Source files can now contain more complex header
* compile: Config is now responsible for whole process
* src: reflect changes in compile script
* Missing copyright header
* Add util script
* populate: Reflect changes in tags structure
* get_cfg: Replace flavors by tags to be consistent
* get_cfg: Reflect changes in tags structure
* run: Parse configs
* run: Rework lift to use class instead of random stuff everywhere
* run: Removed unittest
* run: Remove tests.py
* src: Add headers to src tests
* run: Obliterate last remnants of tests.py
* Update README to reflect changes
* Change README from plaintext to markdown
* Update .remill_commit_id
* Update .remill_commit_id
* lift: Filter function from abi_libs based on other flags
* lift: C++11 compatibility
* lift: Change severity of logs when IR prototype of ext function is not used.
* Docs: Update links with the new organization name
* CI/Travis: Update remotes with the new organization name
* mcsema-disass: Update links with the new organization name
* Dockerfile: Update remotes with the new organization name
* Change required Dyninst version
* Function blocks are explicitly checked for successors if they end with jump
* Whitespace
* Fix compile warning about signedness
* Fix compile warning about signedness
* Remove redundant recursion check for outgoing edge from bb
* Adds Section default initialization
* Whitespaces
* Early return
* Displacement is considered only if operand cannot be statically calculated
* ControlFlowOperand at the end is not needed, it is included in succs of bb
* Soften OffsetTable::Match from FATAL to WARNING if targets are empty
* Rework resolution of outgoing edges of bb
* Use ParseAPI::Function::contains instead of manual search
* Remove log message that was too verbose
* Soften heuristic to calculate offset tables as it was too strict
* Fix typo in comment
* Offset tables are now brute-forced if there are no candidates
* Improve algorithm to recognize MemoryDisplacements
* Better error message if bb succ are not determined correctly
* Build special code section from instructions
* Add some clarity comments around BuildCode
* Add code_segment into the module for the time of resolving instruction xrefs
* Add only instruction that do have some references to the list that is resolved later
* Before refactor & change of code style
* Rename files to match the rest of McSema
* Remove ArgParser, add glog and gflags
* Remove old files
* Rename some flags to match ida frontend
* Small test improvements
* Abolish ExternalFunc, which is reborn as POD
* Big code style sweep
* Renaming of variables
* Add CHECKs in main
* Main can be foung in stripped binaries
* WIP: Jump has lea-like hanlding, xrefs are search according to ParseAPI instead of SymtabAPI
* WIP: Stripped binaries are now trying to name init, fini
* WIP segment xref
* WIP xrefs are found in data, rodata, needs bss + cleanup
* SymbolMap is now container for all possible targets of xrefs
* Xrefs in rodata, data should be resolved correctly
* Bss self xrefs
* WIP Smarter tryEval
* Cleanup with DataXrefs
* No more of .got.plt stubs
* WIP: Try to locate missing functions via xref
* WIP More passes are now run to parse new functions
* WIP Safe point
* WIP: Displacement
* WIP aligment when searching for xrefs is taken into account
* Addresses stored in all data section are now inspected as potential entries of functions
* Need to search for code refs and parse in .*_array as well
* Messy as hell but everything seems to work
* WIP search for main now works in pie code (lea 0x...(%rip),...)
* Forgot to parse newly found functions from _start
* Bunch of hotfixes, preparing for cleaning
* Small code style chnages, bunch of comments to not get lost after weekend
* Externals variables now have imaginary addr
* MagicSection is now separate class, ExternalFunctions write themselves
* WIP relocations are now working, needs cleanup
* Remove throw, preparing to clean up xref handling
* Update README
* Base of DisassContext structure
* Starting to remove things from CFGWriter
* SectionManager is now global
* Managers are now global, to make CFGWriter smaller
* Cleanup
* Segment variables and magic section are now from context
* External and global variables are part of context
* init/fini now renamed based on information from symtab.isStripped()
* External_funcs are now in context
* Fixing tryParse bug
TryParse of segment ended too soon as end was calculated horribly
wrong and I am amazed it actually worked
* Data sections now use only tryParse to get xrefs and vars
* Refactor mistake
* Correctly parsing xrefs on the end of segment
Off by one error fix
* Code style, replacing cerr with glog
* DisassContext now holds all metadata
Removed skip_functions
CFG now contains entry for each function, only meaningful ones have
implementation
gDisassContext now holds everything needed to resolve xrefs
* Code style, forgot to include file last commit
* WIP code_xrefs resolve mechanism cleanup
* Merge CrossXrefs
CFGWriter::CrossXref abolished in favor of implementation in Util.
* Fix bug, with external not being recognizes in Context
* Lifting .so is broken and I have no idea how to do it
* Immediate values, partial variables
Rework code around immediate values, it is finally not just blindly
adding xrefs from everything
Sometimes two variables can occupy the same space (if one is suffix of
other). There is no real way to resolve it, so if there is something
targeting .data, .rodata, .bss it is just added as xref.
* Simplify resolve of instructions
* Remove found_xref from CFGWriter
* Cleaner lookup of regions
* Clean main a bit
* Code style changes
* Better variable names
* File structure
* README todo & shell changes
* Another round of code style
* Syntax error
* Renaming to init/fini only in stripped binaries
* One less writeDataXref wrapper
* Displacement now tries to resolve itself correctly
* Removed another now useless wrapper function
* Basic skeleton for recognising jump tables
* Offset tables
Offset tables are now recognized based on simple heuristic.
Offset tables that are immediately followed look like single one,
when resolving references this is taken into account.
Minor code style improvements
* Skeleton for local variables
* Resolve compiler warnings
* Parameters from debug info are also treated as local vars
* Decouple section parsing out of CFGWriter
* Update README
* Edges to catch blocks are ignored
* cmake now uses cxx-common protobuf instead of system-wide
* SectionManager does not abort when section is found
* Compiler warnings fix
* Remove constexpr, simplify FishForXref using set of overloads
* Edges are now properly checked to exclude some types.
* README update required cpp standart and Dyninst version
* Copyright header
* Typo, pretty_dump is now hidden behind flag
* SectionParser is now properly implemented
* First entry of Offset table can target itself
* Reworked data parsing
Last instruction in the block gets xref if it's a branching.
Utilities around external symbols recovery.
* Multiple improvements
* Removed recovery of variables from data sections as it was not working
properly
* pie_mode is now required for position independent binaries
* part of ubuntu 18.04 coreutils/gnutils can be lifted
* externals are now extracted from .plt stubs if linkage() does
not provide information
* Only link dyninst libs that are needed
* Remove some of log messages
* Unresolved cross_xrefs into text are now properly removed if they are from a switch
* Replace std::experimental::optional with slightly worse own implementation
* Fixed uninitialized variable usage
* Remove ExternalFunctionManager as global object
* Remove incorrectly implemented functions from SectionManager
* Codestyle changes
* TryEval now uses Maybe instead of bool as return type
* Changing last code xref is now cleaner with sanity check
* CrossXref now requires non-pointer type in template
* GetLastXref can return DataReference as well as CodeRef
* Missing reference
* Changed DisassContext into local member of CFGWriter
* SectionManager::IsCode instead manual search for text section
* Add consts into SectionManager where appropriate
* Change SectionManager to be local under CFGWriter
* Build flag is now cmake, not env
* Lift script should work with dyninst
* Cleaner local README
* Top level README
* Update README.md
* Set proper RPATH when install
* README fixes
* Remove tests. They will be added in separate branch
* Typo
* Revert changes in README
* Remove test section from README
* Correct constness when appending to global ctors
* Remove obsolete commit.
* Return type for native -> lifted is now pointer type size.
* Main returns i32
* Update README.md
* Update instructions to reflect a script that enables LLVM toolchain support in VS 2017 Build Tools
* Update .remill_commit_id
* Update .remill_commit_id
* Attempt to resolve Issue #521
* minor fix
* minor fix
* minor fix
* Simplifications and comments
* If it's a copy of shared data, then don't treat it as an xref
* Error log if there is segment variable with the same name as external var
* Added flag and checks if the variable needs initialization if already defined;
* fix noreturn for the functions throwing exceptions;
* review changes
* Update get_cfg.py
* Update get_cfg.py
* Fix the recovery of exception action table chain
* Update the prebuild cfg for testsuite
* Fix entrypoint function not getting recovered in ida7
* Change the order of idc.GetFunctionName and idc.GetTrueName while looking for function name
* Windows: Update build instructions for VS 2017 and LLVM 7.0.1
* Windows: Instruct the user to set the CMAKE_INSTALL_PREFIX in the README
* Update the remill checkout command
* Update the README
* Handle large sized externals as byte arrays
* Externals <= 128 bits are treated as an integer
* Externals > 128 bits are treated as a byte array aligned the same as the
original variable
* Output recovered external variable size in mcsema-disass debug info