Skip to content

Commit 3fd021b

Browse files
author
Triton Library
committed
make sure initLeaAst does not update the sym engine
1 parent 9015a0f commit 3fd021b

File tree

5 files changed

+26
-17
lines changed

5 files changed

+26
-17
lines changed

src/libtriton/bindings/python/objects/pyTritonContext.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1994,7 +1994,7 @@ namespace triton {
19941994
static PyObject* TritonContext_initLeaAst(PyObject* self, PyObject* mem) {
19951995
try {
19961996
if (PyMemoryAccess_Check(mem)) {
1997-
PyTritonContext_AsTritonContext(self)->getSymbolicEngine()->initLeaAst(*PyMemoryAccess_AsMemoryAccess(mem), true);
1997+
PyTritonContext_AsTritonContext(self)->initLeaAst(*PyMemoryAccess_AsMemoryAccess(mem), true);
19981998
}
19991999
else
20002000
return PyErr_Format(PyExc_TypeError, "TritonContext::initLeaAst(): Expects a MemoryAccess as argument.");

src/libtriton/context/context.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -776,13 +776,13 @@ namespace triton {
776776
}
777777

778778

779-
triton::ast::SharedAbstractNode Context::getRegisterAst(const triton::arch::Register& reg) {
779+
triton::ast::SharedAbstractNode Context::getRegisterAst(const triton::arch::Register& reg) const {
780780
this->checkSymbolic();
781781
return this->symbolic->getRegisterAst(reg);
782782
}
783783

784784

785-
triton::ast::SharedAbstractNode Context::getRegisterAst(triton::arch::Instruction& inst, const triton::arch::Register& reg) {
785+
triton::ast::SharedAbstractNode Context::getRegisterAst(triton::arch::Instruction& inst, const triton::arch::Register& reg) const {
786786
this->checkSymbolic();
787787
return this->symbolic->getRegisterAst(inst, reg);
788788
}
@@ -1054,6 +1054,12 @@ namespace triton {
10541054
}
10551055

10561056

1057+
void Context::initLeaAst(triton::arch::MemoryAccess& mem, bool force) const {
1058+
this->checkSymbolic();
1059+
this->symbolic->initLeaAst(mem);
1060+
}
1061+
1062+
10571063
std::unordered_map<triton::usize, triton::engines::symbolic::SharedSymbolicExpression> Context::sliceExpressions(const triton::engines::symbolic::SharedSymbolicExpression& expr) {
10581064
this->checkSymbolic();
10591065
return this->symbolic->sliceExpressions(expr);

src/libtriton/engines/symbolic/symbolicEngine.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ namespace triton {
697697
}
698698

699699

700-
triton::ast::SharedAbstractNode SymbolicEngine::getShiftAst(const triton::arch::arm::ArmOperandProperties& shift, const triton::ast::SharedAbstractNode& node) {
700+
triton::ast::SharedAbstractNode SymbolicEngine::getShiftAst(const triton::arch::arm::ArmOperandProperties& shift, const triton::ast::SharedAbstractNode& node) const {
701701
auto imm = shift.getShiftImmediate();
702702
auto reg = shift.getShiftRegister();
703703

@@ -790,7 +790,7 @@ namespace triton {
790790
}
791791
}
792792

793-
triton::ast::SharedAbstractNode SymbolicEngine::getIndexAst(const triton::arch::arm::ArmOperandProperties& vas_index, const triton::ast::SharedAbstractNode& node) {
793+
triton::ast::SharedAbstractNode SymbolicEngine::getIndexAst(const triton::arch::arm::ArmOperandProperties& vas_index, const triton::ast::SharedAbstractNode& node) const {
794794
auto vas_size = vas_index.getVASSize() * triton::bitsize::byte;
795795

796796
auto low = vas_index.getVectorIndex() * vas_size;
@@ -800,7 +800,7 @@ namespace triton {
800800
}
801801

802802

803-
triton::ast::SharedAbstractNode SymbolicEngine::getExtendAst(const triton::arch::arm::ArmOperandProperties& extend, const triton::ast::SharedAbstractNode& node) {
803+
triton::ast::SharedAbstractNode SymbolicEngine::getExtendAst(const triton::arch::arm::ArmOperandProperties& extend, const triton::ast::SharedAbstractNode& node) const {
804804
triton::uint32 size = extend.getExtendSize();
805805

806806
switch (extend.getExtendType()) {
@@ -925,7 +925,7 @@ namespace triton {
925925

926926

927927
/* Returns the AST corresponding to the register */
928-
triton::ast::SharedAbstractNode SymbolicEngine::getRegisterAst(const triton::arch::Register& reg) {
928+
triton::ast::SharedAbstractNode SymbolicEngine::getRegisterAst(const triton::arch::Register& reg) const {
929929
triton::ast::SharedAbstractNode node = nullptr;
930930
triton::uint32 bvSize = reg.getBitSize();
931931
triton::uint32 high = reg.getHigh();
@@ -957,7 +957,7 @@ namespace triton {
957957

958958

959959
/* Returns the AST corresponding to the register and defines the register as input of the instruction */
960-
triton::ast::SharedAbstractNode SymbolicEngine::getRegisterAst(triton::arch::Instruction& inst, const triton::arch::Register& reg) {
960+
triton::ast::SharedAbstractNode SymbolicEngine::getRegisterAst(triton::arch::Instruction& inst, const triton::arch::Register& reg) const {
961961
triton::ast::SharedAbstractNode node = this->getRegisterAst(reg);
962962
inst.setReadRegister(reg, node);
963963
return node;
@@ -1259,7 +1259,7 @@ namespace triton {
12591259

12601260

12611261
/* Initializes the memory access AST (LOAD and STORE) */
1262-
void SymbolicEngine::initLeaAst(triton::arch::MemoryAccess& mem, bool force) {
1262+
void SymbolicEngine::initLeaAst(triton::arch::MemoryAccess& mem, bool force) const {
12631263
if (mem.getBitSize() >= bitsize::byte) {
12641264
const triton::arch::Register& base = mem.getConstBaseRegister();
12651265
const triton::arch::Register& index = mem.getConstIndexRegister();

src/libtriton/includes/triton/context.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,10 +397,10 @@ namespace triton {
397397
TRITON_EXPORT triton::ast::SharedAbstractNode getMemoryAst(triton::arch::Instruction& inst, const triton::arch::MemoryAccess& mem);
398398

399399
//! [**symbolic api**] - Returns the AST corresponding to the register.
400-
TRITON_EXPORT triton::ast::SharedAbstractNode getRegisterAst(const triton::arch::Register& reg);
400+
TRITON_EXPORT triton::ast::SharedAbstractNode getRegisterAst(const triton::arch::Register& reg) const;
401401

402402
//! [**symbolic api**] - Returns the AST corresponding to the register and defines the register as input of the instruction.
403-
TRITON_EXPORT triton::ast::SharedAbstractNode getRegisterAst(triton::arch::Instruction& inst, const triton::arch::Register& reg);
403+
TRITON_EXPORT triton::ast::SharedAbstractNode getRegisterAst(triton::arch::Instruction& inst, const triton::arch::Register& reg) const;
404404

405405
//! [**symbolic api**] - Returns a new symbolic expression. Note that if there are simplification passes recorded, simplification will be applied.
406406
TRITON_EXPORT triton::engines::symbolic::SharedSymbolicExpression newSymbolicExpression(const triton::ast::SharedAbstractNode& node, const std::string& comment="");
@@ -513,6 +513,9 @@ namespace triton {
513513
//! [**symbolic api**] - Concretizes a symbolic register.
514514
TRITON_EXPORT void concretizeRegister(const triton::arch::Register& reg);
515515

516+
//! [**symbolic api**] - Initializes the effective address of a memory access.
517+
TRITON_EXPORT void initLeaAst(triton::arch::MemoryAccess& mem, bool force=true) const;
518+
516519
//! [**symbolic api**] - Slices all expressions from a given one.
517520
TRITON_EXPORT std::unordered_map<triton::usize, triton::engines::symbolic::SharedSymbolicExpression> sliceExpressions(const triton::engines::symbolic::SharedSymbolicExpression& expr);
518521

src/libtriton/includes/triton/symbolicEngine.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ namespace triton {
127127
inline void addBitvectorMemory(triton::uint64 mem, const SharedSymbolicExpression& expr);
128128

129129
//! Returns the AST corresponding to the extend operation. Mainly used for AArch64 operands.
130-
triton::ast::SharedAbstractNode getExtendAst(const triton::arch::arm::ArmOperandProperties& extend, const triton::ast::SharedAbstractNode& node);
130+
triton::ast::SharedAbstractNode getExtendAst(const triton::arch::arm::ArmOperandProperties& extend, const triton::ast::SharedAbstractNode& node) const;
131131

132132
//! Returns the parent AST after inserting the subregister (node) in its AST.
133133
triton::ast::SharedAbstractNode insertSubRegisterInParent(const triton::arch::Register& reg, const triton::ast::SharedAbstractNode& node, bool zxForAssign=true);
@@ -221,16 +221,16 @@ namespace triton {
221221
TRITON_EXPORT triton::ast::SharedAbstractNode getMemoryAst(triton::arch::Instruction& inst, const triton::arch::MemoryAccess& mem);
222222

223223
//! Returns the AST corresponding to the register.
224-
TRITON_EXPORT triton::ast::SharedAbstractNode getRegisterAst(const triton::arch::Register& reg);
224+
TRITON_EXPORT triton::ast::SharedAbstractNode getRegisterAst(const triton::arch::Register& reg) const;
225225

226226
//! Returns the AST corresponding to the register and defines the register as input of the instruction.
227-
TRITON_EXPORT triton::ast::SharedAbstractNode getRegisterAst(triton::arch::Instruction& inst, const triton::arch::Register& reg);
227+
TRITON_EXPORT triton::ast::SharedAbstractNode getRegisterAst(triton::arch::Instruction& inst, const triton::arch::Register& reg) const;
228228

229229
//! Returns the AST corresponding to the shift operation. Mainly used for Arm32 operands.
230-
triton::ast::SharedAbstractNode getShiftAst(const triton::arch::arm::ArmOperandProperties& shift, const triton::ast::SharedAbstractNode& node);
230+
triton::ast::SharedAbstractNode getShiftAst(const triton::arch::arm::ArmOperandProperties& shift, const triton::ast::SharedAbstractNode& node) const;
231231

232232
//! Returns the AST corresponding to the VAS vector index operation. Mainly used for Arm Neon vector operands.
233-
triton::ast::SharedAbstractNode getIndexAst(const triton::arch::arm::ArmOperandProperties& vas_index, const triton::ast::SharedAbstractNode& node);
233+
triton::ast::SharedAbstractNode getIndexAst(const triton::arch::arm::ArmOperandProperties& vas_index, const triton::ast::SharedAbstractNode& node) const;
234234

235235
//! Returns the new symbolic expression and links this expression to the instruction.
236236
TRITON_EXPORT const SharedSymbolicExpression& createSymbolicExpression(triton::arch::Instruction& inst, const triton::ast::SharedAbstractNode& node, const triton::arch::OperandWrapper& dst, const std::string& comment="");
@@ -302,7 +302,7 @@ namespace triton {
302302
TRITON_EXPORT bool isRegisterSymbolized(const triton::arch::Register& reg) const;
303303

304304
//! Initializes the effective address of a memory access.
305-
TRITON_EXPORT void initLeaAst(triton::arch::MemoryAccess& mem, bool force=true);
305+
TRITON_EXPORT void initLeaAst(triton::arch::MemoryAccess& mem, bool force=true) const;
306306

307307
//! Gets the concrete value of a symbolic variable.
308308
TRITON_EXPORT triton::uint512 getConcreteVariableValue(const SharedSymbolicVariable& symVar) const;

0 commit comments

Comments
 (0)