BinaryAnalysisPlatform / bap

Binary Analysis Platform
MIT License
2.07k stars 273 forks source link

adds the extended lvalue assignment to Primus Interpreter #1498

Closed ivg closed 2 years ago

ivg commented 2 years ago

And uses it to specify various argument passing mechanics. An expression is an lvalue if it is a register, a load (which is a generalization of a pointer), an ite of two lvalues, or a cast (including the extraction) of an lvalue. Or, more formally,

lvalue ::= Var _
         | Load (_,_,_,_)
         | Ite (_,<lvalue>,<lvalue>)
         | Cast (_,_,<lvalue>)
         | Extract (_,_,<lvalue>)
         | Concat (_,_,<lvalue>)

The new Interpreter.assign primitive is now used to pass and return arguments to and from Primus Lisp interpreter, so now we can pass and return structures and other non-trivial objects.