diff --git a/libIRDB/include/util/params.hpp b/libIRDB/include/util/params.hpp index 2c9861055ae5df53bb989001f530d3d0ca1d2a1a..758ad7241d08b47aafc246322f0e072a5f891e82 100644 --- a/libIRDB/include/util/params.hpp +++ b/libIRDB/include/util/params.hpp @@ -5,5 +5,6 @@ extern bool IsParameterWrite(const libIRDB::FileIR_t *firp, libIRDB::Instruction extern bool CallFollows(const libIRDB::FileIR_t *firp, libIRDB::Instruction_t* insn, const std::string& arg_str, const std::string & = ""); extern bool LeaFlowsIntoCall(const libIRDB::FileIR_t *firp, libIRDB::Instruction_t* insn); extern bool LeaFlowsIntoPrintf(const libIRDB::FileIR_t *firp, libIRDB::Instruction_t* insn); +extern bool FlowsIntoCall(const libIRDB::FileIR_t *firp, libIRDB::Instruction_t* insn); #endif diff --git a/libIRDB/src/util/params.cpp b/libIRDB/src/util/params.cpp index 3db2c7cd552ef11c4b9e2d5e7b06e7a7393d8590..b17b531bc3a24f977c43137a851ac800001a8ad4 100644 --- a/libIRDB/src/util/params.cpp +++ b/libIRDB/src/util/params.cpp @@ -216,16 +216,11 @@ bool libIRDB::CallFollows(const FileIR_t *firp, Instruction_t* insn, const strin return false; } -bool libIRDB::LeaFlowsIntoCall(const FileIR_t *firp, Instruction_t* insn) +bool libIRDB::FlowsIntoCall(const FileIR_t *firp, Instruction_t* insn) { auto d=DISASM({0}); insn->Disassemble(d); - if(string(d.Instruction.Mnemonic)!="lea ") - return false; - -// std::cout << "LeaFlowsIntoCall(): investigating " << insn->getDisassembly() << endl; - string param_write; if (!libIRDB::IsParameterWrite(firp, insn, param_write)) return false; @@ -233,6 +228,17 @@ bool libIRDB::LeaFlowsIntoCall(const FileIR_t *firp, Instruction_t* insn) return CallFollows(firp, insn, param_write); } +bool libIRDB::LeaFlowsIntoCall(const FileIR_t *firp, Instruction_t* insn) +{ + auto d=DISASM({0}); + insn->Disassemble(d); + + if(string(d.Instruction.Mnemonic)!="lea ") + return false; + + return FlowsIntoCall(firp, insn); +} + bool libIRDB::LeaFlowsIntoPrintf(const FileIR_t *firp, Instruction_t* insn) { auto d=DISASM({0});