Commit Graph
966 Commits
Author SHA1 Message Date
feliam 70b1fddd91 Add/fix tests 2020-09-02 12:43:28 -03:00
feliam 41d9f502d7 blkn 2020-08-27 17:59:33 -03:00
feliam 8a5b34c2ec New exploration stopping condition 2020-08-27 16:44:55 -03:00
Feist Josselin 2eaf7c030e crytic-compile: use latest release (#1795)
manticore-verifier: enable crytic-comoile cli flags
2020-08-25 16:27:22 -07:00
wolfloandEric Hennenfent 6d590e1a60 Update gas metering for calls to empty accounts (#1774)
* Update gas metering for calls to empty accounts

* Add test for call gas costs

Co-authored-by: Eric Hennenfent <[email protected]>
2020-08-25 16:26:00 -07:00
George Hotz 3a256d7193 Fix BitVec with symbolic offset and fix TranslatorSmtlib.unique thread safety (#1792)
* minor fixes

* fix spacing

* always put it through BitVecExtract
2020-08-20 12:41:01 -03:00
Eric Kilmer 0f904d578c Fix Coveralls for external PRs (#1794)
Use Github Token instead of other secret coveralls variable
2020-08-17 12:26:15 -04:00
Eric Hennenfent 402de84c06 Convert plugin list to dict (#1781)
* Convert plugin list to dict

* Appease MyPy
2020-08-14 14:50:40 -07:00
85aa9ee9e1 Symbolic-length reads from symbolic sockets (#1786)
* Symbolic-length reads from symbolic sockets

* Add native binary test

* Add type hints to recvfrom

Co-authored-by: sschriner <[email protected]>

* Fixup type hints for recvfrom

* Update SymbolicSocket constraints pointers on fork

Co-authored-by: Eric Hennenfent <[email protected]>
Co-authored-by: sschriner <[email protected]>
2020-08-14 12:15:14 -04:00
feliam 0ec842cbd7 Removing Thread unsafe global caching (#1788) 2020-08-12 17:21:17 -03:00
Eric KilmerandEric Hennenfent 4334d89354 Add Manticore native State-specific hooks (#1777)
* Add Manticore native State-specific hooks

* Add tests

* Add type hints when setting state

* Add back needed assertion for PC hook

* Test that hook actually executes in test

Co-authored-by: Eric Hennenfent <[email protected]>
2020-08-11 18:21:35 -07:00
Eric KilmerandEric Hennenfent 9b2c2f29c9 Linux: Add stat method for FdLike (#1780)
* Linux: Add stat method for FdLike

* Add tests

* Don't try to cover abstract class function bodies

* Update test file names

* Try again to not cover abstract methods

* Add typehint to Directory stat()

Co-authored-by: Eric Hennenfent <[email protected]>

* Fix typehints with os.stat

* Adjust type for stat object

Co-authored-by: Eric Hennenfent <[email protected]>
2020-08-11 10:40:15 -07:00
Eric KilmerandEric Hennenfent f20a01143f Use default handler for symbolic system call arguments (#1785)
* Use default handler for symbolic system call arguments

This will only be called when there is an implementation of the system
call in the concrete Linux class and no implementation in the symbolic
SLinux.

The action is simply to concretize any found symbolic system call
arguments.

This should hopefully ease the use of Manticore when it encounters
symbolic arguments to system calls that don't have specially implemented
symbolic handling. A debug message is printed when this happens.

* Make sure to return passed implementation

* Use rsplit instead of indexing to get owner class of method

Co-authored-by: Eric Hennenfent <[email protected]>
2020-08-06 10:48:56 -07:00
feliamandEric Hennenfent 2347b21060 Change the default to threading (#1779)
Co-authored-by: Eric Hennenfent <[email protected]>
2020-08-04 18:52:16 -07:00
Eric Kilmer 547a59c7db Coveralls Take 2 (#1784)
* Use coveralls

* Use python coveralls

* Try again with different casing

* Use coveralls repo token from web page

* Use GITHUB_TOKEN in github action parallel-finished

* Remove codecov config

* Add note for final coverage job

* Swap Readme coverage badge
2020-08-04 15:36:49 -07:00
Eric Hennenfent 2159aa76dc Capture return values in run.sh (#1776)
* Capture return value

* Increase verifier test timeout

* Fix typo

* Add more frequent checks to m.is_killed
2020-08-04 09:17:56 -07:00
sschrinerandEric Kilmer 8a8f35c53d Create a model for strncpy (#1770)
* Add strncpy model

* Forgot to remove an edit

* Adding model tests

* Added strncpy c file and created a directory for all string modeling binaries

* Update to argument ordering in manticore/native/models.py

Co-authored-by: Eric Kilmer <[email protected]>

* Removed dead code

Co-authored-by: Eric Kilmer <[email protected]>
2020-07-14 13:17:30 -04:00
feliamandEric Hennenfent da513511e0 Add doc, fix output bugs (#1769)
* Add doc, fix output bugs

* Apply suggestions from code review

Co-authored-by: Eric Hennenfent <[email protected]>

* Readme link

Co-authored-by: Eric Hennenfent <[email protected]>
2020-07-09 12:55:38 -07:00
wolflo 2ce7bb88d5 Update EVM usage example (#1772) 2020-07-09 11:37:05 -03:00
sschrinerandEric Kilmer 14ef9ec099 New working model of strlen (#1725)
* New working model of strlen - Symbolic Test yet to be updated

* Updated modeling test for all symbolic input

* Fixed code climate issue

* Adding binary for new test

* Updated test to use sets for compairison

* Removed length compairison

* Fix argument concretization indexing

* Preserve both model implementation strategies

* Corrected formatting

* Removed whitespace for code climate

* Removed whitespace for code climate

Co-authored-by: Eric Kilmer <[email protected]>
2020-07-07 13:25:13 -04:00
feliam 7d26c9d5b4 Typo (#1768) 2020-07-06 12:46:57 -03:00
feliam e265bceae6 Specialized iterative serialization for Array (#1756)
* Specialized itereative serialization for Array

* lint
2020-06-30 15:15:54 -03:00
Eric Hennenfent a2f072f822 Enable nightly uploads to PyPI (#1757)
* Add Github Actions config

* Handle nightly versioning

* Fix typos in README and PyPI upload

* Make image URL global

* Attempt today's upload

* Install wheel

* Fix indentation

* Only run on schedule

* Use versioned action, add nightly to readme

* Retest upload w/ hard-coded version

* Apparently v1 doesn't parse

* Revert to only scheduled
2020-06-30 11:15:03 -07:00
Eric Hennenfent 4712491d37 Manticore 0.3.4 (#1720)
* Revert 1e23f7ab

Remove psutil as a dependency

* Bump version numb, update changelog

* Re-do updated model not available message

* Update for latest PRs

* Update dates
0.3.4
2020-06-26 18:54:55 -07:00
f39e6ba768 Manticore verifier (#1717)
* Add ONE failing test

* Fix test

* Try fix get-related

* Snapshots

* CC

* Allow snapshooting just from main()

* A test

* Test and fix is_main

* CC

* review

* ismain vs is_running

* is main to is main script

* Remove unused member variable

* initial import manticore verifier

* Fix verifier installation

* clear ready states

* CC and smoke test

* CC

* Increase cov

* Move regression to other

* blkn

* blkn

* Move get related

* CC

* fix concolic

* lint

* DivByZero default to zero

* blkn

* Update manticore/core/smtlib/solver.py

Co-authored-by: Eric Kilmer <[email protected]>

* Update manticore/core/smtlib/constraints.py

Co-authored-by: Eric Kilmer <[email protected]>

* Update manticore/core/smtlib/constraints.py

Co-authored-by: Eric Kilmer <[email protected]>

* remove odd string

* lint

* mypy lint

* Update manticore/core/smtlib/visitors.py

Co-authored-by: Eric Kilmer <[email protected]>

* lint

* Add Docs

* blkn

* blkn

* Replace modulo with masks

* Blacken

* blkn

* fix mypy

* fix mypy

* Add tests for signed LT behavior

* New test

* Fix constant folding

* lint

* blkn

* lint

* Fixes...

* lint

* Unittesting power

* Permisive read_buffer

* Fix optimize

* Preserve precision in constant folding

* Strip left-in print debugging

* blkn

* remove wasm_sym temporarily

* Better simplification for constants

* Add json

* blkn

* Better commmandline args

* blkn

* fix wasm

* Fix

* better commanlining

* REmove get_related from the default path and fix arm test

* blkn

* fix related to tests

* blkn

* Fix bug in test and disable debug messages in Solver

* smtlib config to disable multiple check-sat in newer z3

* Disable log test and fix merging poc vs variable migration

* blkn

* Avoid exception in some callbacks

* can_rais at did_will

* yikes!

* blkn

* Yices found one more states in truffle

* Add a config constant to ignore symbolic balances

* Add a config constant to ignore symbolic balances 2

* Relax truffle state count

* Relax truffle state count 2

* Change cli name and test

* Clear redy states in verifier workspace

* Clear ready states in verifier workspace

* Relative ws path on verifier output. Clean CREATE testcase example

* Blkn

* Improve coverage and funcid solving

* lint

* Better testcase generation at verifier

* Better testcase generation at verifier and typos

* Better output and default re

* Test must revert

* Better output and default re

* move generate_testcase_ex to private method

Co-authored-by: Eric Kilmer <[email protected]>
Co-authored-by: Eric Hennenfent <[email protected]>
2020-06-26 18:12:34 -03:00
Eric Hennenfent 61909a157b Nightly MacOS Tests (#1614)
* Experiment with testing on OSX

Not committing to front-lining OSX support as a feature because there are some fundamental performance concerns, but I would like to see how the tests behave.

* solc --> usr/local/bin

* Don't fail fast

* Require Unicorn 1.0.2rc2

¯\_(ツ)_/¯

* Update Bash on OSX builds

* Use mac solc

* Simpler solidity installation

* Fix wasm tests maybe?

* Swap `ls` args in truffle tests

* Good 'ol printf debugging

* OSX Keystone install

* Truffle test miscounting fix?

* Add unzipping timeout

* Remive timeout _and_ `yes`

* Allow output check to work on OSX

* Add list wrapper to filter

* Remove print statements

* yolo keystone via homebrew

* Try again w/ Keystone Brew

* typo

* Create osx.yml

* Revert to Master's ci.yml

* Update to checkout@v2 universally

* Save checkout version change for another PR

It maybe breaks codecov?

* Add Truffle Tests

* Fix Truffle

* Make native an option

* See if native works?

* Revert "See if native works?"

This reverts commit ce90d8bcb0.

* Replace actions content w/ script

* Update number of Truffle tests

* Force working directory

* Remove shebang, fix YAML

* Fix incorrect path to script?

* Why are the docs always wrong

* YAML syntax

* Fix usage of GITHUB_WORKSPACE

* Forget the workspace, just copy the script to the root

* Revert workspace path changes

* Fix VM test generation

* Whitespace fixes

* Only run on a schedule

* Install Yices and CVC4
2020-06-23 12:09:16 -07:00
feliam 166b0415c8 Remove/procrastinate solver query in ether leak detector (#1727)
* Remove/procrastinate solver query in etherleak detector

* blkn
2020-06-22 10:42:14 -03:00
099dc47b69 Fix constant folding & constraint set slicing (#1706)
* Add ONE failing test

* Fix test

* Try fix get-related

* Move regression to other

* blkn

* blkn

* Move get related

* CC

* fix concolic

* lint

* DivByZero default to zero

* blkn

* Update manticore/core/smtlib/solver.py

Co-authored-by: Eric Kilmer <[email protected]>

* Update manticore/core/smtlib/constraints.py

Co-authored-by: Eric Kilmer <[email protected]>

* Update manticore/core/smtlib/constraints.py

Co-authored-by: Eric Kilmer <[email protected]>

* remove odd string

* lint

* mypy lint

* Update manticore/core/smtlib/visitors.py

Co-authored-by: Eric Kilmer <[email protected]>

* lint

* Add Docs

* Replace modulo with masks

* Blacken

* blkn

* fix mypy

* fix mypy

* Add tests for signed LT behavior

* New test

* Fix constant folding

* lint

* lint

* lint

* Unittesting power

* Permisive read_buffer

* Preserve precision in constant folding

* Strip left-in print debugging

* fix wasm

* Fix

* REmove get_related from the default path and fix arm test

* blkn

* fix related to tests

* blkn

* Fix bug in test and disable debug messages in Solver

* smtlib config to disable multiple check-sat in newer z3

* Disable log test and fix merging poc vs variable migration

* blkn

* Avoid exception in some callbacks

* can_raise at did_will

* slightly better z3 onfiguration

* lint

Co-authored-by: Eric Kilmer <[email protected]>
Co-authored-by: Eric Hennenfent <[email protected]>
2020-06-16 21:59:32 -03:00
bdbd0391c8 Symbolic model for strcpy (#1681)
* Working copy for strcpy - without symbolic input

* Corrected null term error

* Needs to be tested but general algorithm idea for handling symbolic input

* Updated according to feedback

* Beginning of strcpy tests

* Revising strcpy algorithm - realised it was flawed

* This should be a more correct way of handling symbolic bytes. Needs testing

* Get rid of redundant code

* Fixed another typo

* Update manticore/native/models.py

Co-Authored-By: Eric Kilmer <[email protected]>

* Clarified and updated comments

* Fixed some errors in model while working on tests

* Progress on tests

* Found typo in models

* Removed unnecassary whitespace

* Added some helper functions for tests and to clean things up

* Added comments for helper functions

* WIP: current state of strcpy tests

* Updated type hints from Expression to BitVec

* Fixed linter complaints

* Updated strcpy return type to make linter happy

* Added some helper properties to expression BitVecITE

* Overwrote equal op in ArraySelect

* Fixed formatting in expression

* Almost done just needs some cleaning

* Attempt at overriding __eq__ again

* Cleaned up tests some still have unresolved __eq__ issues

* Removed stuff from expression and updated test_models.py

* Removed stuff from expression and updated test_models.py

* Basicly done probably needs some more comments for clarity

* Cleaned up the tests a little

* Corrected linter error and added more comments to strcpy model functions

* Remove duplicated word in comment

Co-authored-by: Eric Kilmer <[email protected]>

* Update manticore/native/models.py

Co-authored-by: Brad Larsen <[email protected]>

* Update manticore/native/models.py

Co-authored-by: Brad Larsen <[email protected]>

* Update tests/native/test_models.py

Co-authored-by: Brad Larsen <[email protected]>

* Updates according to feedback

* Swapped can_be_true and must be true

* Updates for feedback

* Forgot to lint

* Fixed some typos

* Largely simplified ITE being built

* Forgot to lint

* This is messy but seems to be concretizing to the correct states

* Very very messy state of the code before attempting to concretize on every possible NULL

* Cleaned up model with forking on every possible NULL

* Removed trailing whitespace for CodeClimate

* Added state.context for offset value back

* New symbolic test with regex for expected output

* New symbolic test with regex for expected output

* Updated for mypy

* Updated comments in tests

* Updated cant_be_null to cannot_be_null

* Corrected docstring location for _test_strcpy

* Add break for efficiency

* Added compiler information and source file

* Updated regex to use raw strings

Co-authored-by: Eric Kilmer <[email protected]>
Co-authored-by: Brad Larsen <[email protected]>
2020-06-09 17:12:19 -04:00
feliamandEric Kilmer ddec477dbd Rollback to support yices again (#1714)
* Rollback to support yices again

* CC

* Test yices

* Better get-value handling

* Z3/CVC4/YICES

* CC

* Yices/CVC4

* CC

* Default yices

* Default debug level fix

* Quick auto solver

* shutil.which

* CC

* Default yices for testing

* Remove old commented out code

* Update manticore/core/smtlib/solver.py

Co-authored-by: Eric Kilmer <[email protected]>

* Update manticore/core/smtlib/solver.py

Co-authored-by: Eric Kilmer <[email protected]>

* Remove unused class

* Update manticore/core/smtlib/solver.py

Co-authored-by: Eric Kilmer <[email protected]>

* Update manticore/core/smtlib/solver.py

Co-authored-by: Eric Kilmer <[email protected]>

* Readme hack

* CC/lint

* Fix typing

* z3 back to the rodeo

* lint

* Fancy optimize

* Fix lint

* CC reviewed

Co-authored-by: Eric Kilmer <[email protected]>
2020-06-09 16:16:18 -03:00
feliam 7f5f12c5a7 Fix default output space when workspace is in mem: (#1724) 2020-06-09 11:37:38 -03:00
4495b6f03e VMTests tests for istanbul (#1676)
* New upstream auto-VMTests tests for istanbul

* Removed redundant tests

* bugfix

* Reset CI

* Debug CI 1

* debug CI

* wakey wakey GitHub Actions

* Poke GH

* Fix detector

* New CI weaky weaky

* Change default smtlib max memory usage weaky weaky

* ci weaky waky

* ci weaky waky

* CI waky weaky

* Fix test_general weaky weaky

* Fix ethtests. weaky waky

* Unittest driven bugfixes. weaky waky

* Avoid check-sat in the middle of a solving. weaky wakey

* Fix config. weaky wakey

* Reduce queries in IO detector

* CC

* CC

* fix nativve tests

* CC and solver defaults

* merge. weaky waky

* Fixing tests

* Remove debug print

* Fix in DetectUninitializedMemory

* Change truffle test state count

* CC

* Better forking on failed transactions

* CC

* Fix truffle tst state count

* Improve z3 speed

* Fix truffle test state count

* Change default gas concretization in CALL

* Better logging at fork

* Insane commit to fix several bugfixes and refator stuff

* black

* Fix selfdestruct test

* Fix some unittests

* Default to bytes fo constant calldata

* Fix tests

* Better doc

* https://github.com/trailofbits/manticore/pull/1676/files#r426927762

* https://github.com/trailofbits/manticore/pull/1676/files#r426946198

* Leave native alone and fix pyevmasm dep

* Update manticore/platforms/evm.py

Co-authored-by: Eric Hennenfent <[email protected]>

* Update manticore/platforms/evm.py

Co-authored-by: Eric Hennenfent <[email protected]>

* isSeven

* OPTI/PESI

* Truffle optimistic

* truffle fix

* Truffle state count

* CC

* Fix tests PESI/OPTI

* Update manticore/core/state.py

Co-authored-by: Samuel E. Moelius <[email protected]>

* Better policy naming

* Update manticore/platforms/evm.py

Co-authored-by: Samuel E. Moelius <[email protected]>

* Update manticore/ethereum/manticore.py

Co-authored-by: Samuel E. Moelius <[email protected]>

* Update manticore/platforms/evm.py

Co-authored-by: Samuel E. Moelius <[email protected]>

* PESi PESSI

* blkn

* weaky

* wakey wakey

* blkn

* unreachable

* Fix state count in checkpoint test (merge)

* remove unused exception var

Co-authored-by: Eric Hennenfent <[email protected]>
Co-authored-by: Samuel E. Moelius <[email protected]>
2020-06-04 19:27:59 -03:00
feliamandEric Hennenfent 3650e577bd Snapshots & is_main (#1710)
* Snapshots

* CC

* Allow snapshooting just from main()

* A test

* Test and fix is_main

* CC

* review

* ismain vs is_running

* is main to is main script

* Remove unused member variable

* Fix is main variable

* Update manticore/core/manticore.py

Co-authored-by: Eric Hennenfent <[email protected]>

* review

* blkn

* Betteer Exception handling

* Lint and test

Co-authored-by: Eric Hennenfent <[email protected]>
2020-06-02 18:03:01 -03:00
Eric Hennenfent 6747143eca Fix Black (#1718)
* Use merge SHA instead of head

Github Actions doesn't update the head variable despite the checkout action merging the active branch into `master`, so the commit range specified was invalid

* Start from common ancestor

* Omit explicit SHA

* Lint HEAD instead of merge

* Manually fetch base SHA

* Print the names of files to be diffed

* Update ci.yml

* Modify a Python file

* Blacken everything that was missing

The modified files got missed due to black not properly running on our CI
2020-05-28 12:54:31 -07:00
Eric Hennenfent 2c90ee07c9 Use CoverageRC, Make CodeCov Less Aggressive (#1705)
* Experimental coverage changes

Tells coverage.py to record coverage for individual test cases, and makes CodeCov tolerate a small drop in overall coverage percentage to account for nondeterministic gas tests.

* Use workspace

* Remove explicit concurrency type declaration

Appears to break use of subprocess in integration tests

* Eliminate dynamic context

* Make all CI respect rcfile

* Use environment variable
2020-05-19 14:58:31 -07:00
feliam c39f870f59 Fix plugin enable/disable magic (#1708)
* FIx enable/disable magic

* CC

* Test enable/disable

* Remove duplicated code
2020-05-19 14:56:53 -07:00
feliam c2b847a460 Add a warning when selected no methods for inclusion (#1707)
* Add a warning when selected no methods for inclusion

* CC
2020-05-19 14:05:47 -03:00
Eric Hennenfent 8e6c481ee9 Remove duplicated entries (#1709)
Github automatically parses the issue templates and adds them to the config file, so they don't need to be included here.
2020-05-19 08:42:44 -07:00
Eric Hennenfent 24161e4771 Blacken (#1711) 2020-05-18 16:49:08 -07:00
Eric KilmerandBrad Larsen 704007e0c3 Fix symbolic syscall arg concretization (#1697)
* Rewind cpu when ConcretizeArgument is raised in system call

* Remove unused ConcretizeSyscallArgument

* Add test for symbolic system call argument

* Roll back PC during handling of ConcretizeArgument

This accomplishes the same thing as before but now the movement is done
in the parent state instead of children states

* Statically link test executable

* Use simple checkpoint and rollback for PC

* Rework checkpoint and rollback in exception-handling

* Create rollback function in State

This is to make sure we don't miss anything when adding future values

* Define only one local variable for exception data

* Remove unused import

* Less verbosity in test

* Rollback in parent state instead of children states

* Always rollback state on Concretize*

* Use typing.NamedTuple

Thank you @bradlarsen

* Use local checkpoint variable

We don't access checkpoint data anywhere else aside from the `execute`
function

* Add type hint to test

Co-authored-by: Brad Larsen <[email protected]>

* Use more specific language in test comment

Co-authored-by: Brad Larsen <[email protected]>

* Remove outdated function name in comment

* Fix missed refactor

* Remove unneeded testing changes after refactor

Co-authored-by: Brad Larsen <[email protected]>
2020-05-18 11:14:34 -07:00
Eric Hennenfent bf79b805ab Update README, Add Issue Templates (#1685)
* Add canned issue templates

* Fix URL params

* Update the README

* Add CLA

* Update Youtube URL

* Remove sudo from example readme

* Reword dependencies in main readme

* Replace mkvirtualenv with default version
2020-05-15 11:28:01 -07:00
feliam 55e2486f47 Fix inheritance magic and add plugin enable/disable (#1696)
* Fix inheritance magic nonsens and add plugin enable/disable

* CC

* Better Plugin default

* Fix enabled default

* Trying to generalize enable/disable for plugins

* Merger is the only plugin using locked context correctly

* Fix plugin context name

* text to enum
2020-05-13 10:44:58 -07:00
feliam 4f7027bf8d Add hashing to constraintSets (#1703)
* Add hashing to constraintSets

* CC

* fix bytearray related tests

* Change get_related default
2020-05-13 10:07:39 -07:00
Samuel E. Moelius 5a707f1bc8 Reduce log messages (#1700)
* Change concretization log message from info to debug.

* Deprioritize helper (e.g., serialization) log messages.
2020-05-12 13:15:22 -07:00
sschriner 7a5f0c7f07 Updated Proc error message to be more informative (#1704) 2020-05-12 14:56:28 -04:00
Samuel E. Moelius 4cccd4d66b Move states that selfdestruct to the ready queue. (#1699) 2020-05-12 11:28:24 -07:00
Samuel E. Moelius 9299033904 Reduce concrete hash log messages. (#1695) 2020-05-12 11:24:20 -07:00
Eric HennenfentandBrad Larsen b1d93d2beb Remove Keystone from existing tests (#1684)
* Cache generated ASM

* Never install Keystone on the CI

* Fix dict retreival one-liner

arguments aren't lazily evaluted, so ks_assemble always got called

* Apply suggestions from code review

Docstrings and type hints

Co-authored-by: Brad Larsen <[email protected]>

* Update tests/native/test_armv7cpu.py

Missed one

Co-authored-by: Brad Larsen <[email protected]>

Co-authored-by: Brad Larsen <[email protected]>
2020-05-11 08:42:47 -07:00
Eric Kilmer 90b4d454b0 Change URL for WASM spec (#1702)
* Change URL for WASM spec

* Fix URL in other place
2020-05-11 08:42:12 -07:00
Brad Larsen cc77acee41 Overhaul Linux file emulation (#1673)
Overhaul Linux file emulation.

Previously, open file descriptors could be mapped to any of the `File`, `Directory`, `SocketDesc`, `Socket`, and `ProcSelfMaps` classes, which didn't share a common supertype, and which didn't have consistent interfaces.

Now, each of these classes implements the `FdLike` abstract base class, which specifies a number of methods.

This overhaul additionally fixes several issues with the Linux support code:

- A program that tried to ioctl on a socket would crash Manticore
- In several places, the error code returned by a failing syscall was incorrect
- Many file descriptor operations could crash Manticore when used on an already-closed descriptor
- Manticore state serialization / deserialization was incorrect for file descriptor types other than File or Socket
- In certain cases, `sys_open` / `sys_openat` could crash Manticore when trying to log a debug message
- In certain cases, `sys_readv` could crash Manticore, instead of correctly returning a negative int value
- `sys_sendfile` was broken due to a variable name typo
- In several places in Manticore’s Linux support code, incorrect type hints were present
- In some places, an exception would attempt to be raised, but that itself would crash due to a missing import.

This commit adds two more example / integration test programs.

Additionally, this adds a helper for working with Python abstract base classes.  This helper lets you declare on a class, via a decorator, that the class is expected to have no unimplemented abstract methods.  If this is not true at runtime, a `TypeError` is thrown.  Without this decorator, you will only discover that a class has unimplemented abstract methods when you try to _instantiate_ that class. This may be much, much later than at class creation time, or perhaps not at all, depending on your code coverage.

Thanks to Eric Kilmer <[email protected]> for review!
2020-05-08 13:57:41 -04:00