mirror of
https://github.com/vtil-project/VTIL-Core
synced 2026-08-17 08:23:03 -04:00
Const-correct VM interface.
This commit is contained in:
parent
a25ce864fe
commit
5b6d37e129
5 changed files with 15 additions and 14 deletions
|
|
@ -45,7 +45,7 @@ namespace vtil
|
|||
if ( x->symbolic_operator != math::operator_id::invalid )
|
||||
tbl[ ( size_t ) x->symbolic_operator ] = x;
|
||||
return tbl;
|
||||
}( );
|
||||
}();
|
||||
|
||||
fassert( lookup_table.size() > ( size_t ) op );
|
||||
const instruction_desc* desc = lookup_table[ ( size_t ) op ];
|
||||
|
|
@ -89,9 +89,7 @@ namespace vtil
|
|||
// If constant, simply convert into operand type.
|
||||
//
|
||||
if ( exp->is_constant() )
|
||||
{
|
||||
return { *exp->get(), exp->size() };
|
||||
}
|
||||
|
||||
// Assert validity and get the variable.
|
||||
//
|
||||
|
|
@ -316,7 +314,7 @@ namespace vtil
|
|||
// Push [<INS> Lhs 0 Rhs] and return Lhs.
|
||||
//
|
||||
force_clobber_register( lhs );
|
||||
block->push_back( { map_operator( op ),{ lhs, operand{ 0, rhs.bit_count() }, rhs } } );
|
||||
block->push_back( { map_operator( op ), { lhs, operand{ 0, rhs.bit_count() }, rhs } } );
|
||||
return lhs;
|
||||
}
|
||||
case math::operator_id::max_value:
|
||||
|
|
@ -327,7 +325,11 @@ namespace vtil
|
|||
// Unpack the expression by forcing re-simplification without
|
||||
// prettification requested and recurse.
|
||||
//
|
||||
return cvt( exp.transform( [ ] ( auto& ) {} ), true );
|
||||
auto copy = exp;
|
||||
( +copy )->simplify_hint = false;
|
||||
( +copy )->is_lazy = false;
|
||||
( +copy )->simplify();
|
||||
return cvt( copy, true );
|
||||
}
|
||||
case math::operator_id::greater:
|
||||
case math::operator_id::greater_eq:
|
||||
|
|
@ -353,7 +355,7 @@ namespace vtil
|
|||
|
||||
// Push [<INS> Tmp Lhs Rhs] and return Tmp.
|
||||
//
|
||||
block->push_back( { map_operator( op ),{ tmp, lhs, rhs } } );
|
||||
block->push_back( { map_operator( op ), { tmp, lhs, rhs } } );
|
||||
return tmp;
|
||||
}
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -48,11 +48,11 @@ namespace vtil
|
|||
{
|
||||
// Reads from the register.
|
||||
//
|
||||
virtual symbolic::expression::reference read_register( const register_desc& desc ) { unreachable(); return {}; }
|
||||
virtual symbolic::expression::reference read_register( const register_desc& desc ) const { unreachable(); return {}; }
|
||||
|
||||
// Reads the given number of bytes from the memory, returns null if aliasing fails.
|
||||
//
|
||||
virtual symbolic::expression::reference read_memory( const symbolic::expression::reference& pointer, size_t byte_count ) { unreachable(); return {}; }
|
||||
virtual symbolic::expression::reference read_memory( const symbolic::expression::reference& pointer, size_t byte_count ) const { unreachable(); return {}; }
|
||||
|
||||
// Writes to the register.
|
||||
//
|
||||
|
|
@ -61,7 +61,7 @@ namespace vtil
|
|||
// Writes the given expression to the memory, returns false if aliasing fails.
|
||||
//
|
||||
virtual bool write_memory( const symbolic::expression::reference& pointer, deferred_value<symbolic::expression::reference> value, bitcnt_t size ) { unreachable(); return false; }
|
||||
bool write_memory_v( const symbolic::expression::reference& pointer, symbolic::expression::reference value ) { return write_memory( pointer, value, value.size() ); }
|
||||
bool write_memory_v( const symbolic::expression::reference& pointer, symbolic::expression::reference value ) { return write_memory( pointer, std::move( value ), value.size() ); }
|
||||
|
||||
// Runs the given instruction, returns whether it was successful.
|
||||
//
|
||||
|
|
|
|||
|
|
@ -63,13 +63,13 @@ namespace vtil
|
|||
|
||||
// Declare the overrides redirecting to the callbacks.
|
||||
//
|
||||
symbolic::expression::reference read_register( const register_desc& desc ) override
|
||||
symbolic::expression::reference read_register( const register_desc& desc ) const override
|
||||
{
|
||||
return hooks.read_register
|
||||
? hooks.read_register( desc )
|
||||
: vm_base::read_register( desc );
|
||||
}
|
||||
symbolic::expression::reference read_memory( const symbolic::expression::reference& pointer, size_t byte_count ) override
|
||||
symbolic::expression::reference read_memory( const symbolic::expression::reference& pointer, size_t byte_count ) const override
|
||||
{
|
||||
return hooks.read_memory
|
||||
? hooks.read_memory( pointer, byte_count )
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ namespace vtil
|
|||
|
||||
// Reads from the register.
|
||||
//
|
||||
symbolic::expression::reference read_register( const register_desc& desc ) override
|
||||
symbolic::expression::reference read_register( const register_desc& desc ) const override
|
||||
{
|
||||
return register_state.read( desc, reference_iterator );
|
||||
}
|
||||
|
|
@ -64,7 +64,7 @@ namespace vtil
|
|||
|
||||
// Reads the given number of bytes from the memory.
|
||||
//
|
||||
symbolic::expression::reference read_memory( const symbolic::expression::reference& pointer, size_t byte_count ) override
|
||||
symbolic::expression::reference read_memory( const symbolic::expression::reference& pointer, size_t byte_count ) const override
|
||||
{
|
||||
return memory_state.read( pointer, math::narrow_cast<bitcnt_t>( byte_count * 8 ), reference_iterator );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -97,7 +97,6 @@ namespace vtil::symbolic
|
|||
//
|
||||
using queue_key = typename detached_queue<cache_value>::key;
|
||||
|
||||
|
||||
// Entry itself:
|
||||
//
|
||||
expression::reference result = {};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue