diff --git a/beaengine/beaengineSources/Includes/Routines_Disasm.c b/beaengine/beaengineSources/Includes/Routines_Disasm.c index e7bde12c00a322c36c17e8d5dc24ee0445e905d8..ae969cdcb1011472326fe3c9313d0a20420b4062 100644 --- a/beaengine/beaengineSources/Includes/Routines_Disasm.c +++ b/beaengine/beaengineSources/Includes/Routines_Disasm.c @@ -97,8 +97,10 @@ int __bea_callspec__ InitVariables (PDISASM pMyDisasm) { (*pMyDisasm).Argument1.ArgType = NO_ARGUMENT; (*pMyDisasm).Argument2.ArgType = NO_ARGUMENT; (*pMyDisasm).Argument3.ArgType = NO_ARGUMENT; + (*pMyDisasm).Argument4.ArgType = NO_ARGUMENT; (*pMyDisasm).Argument2.AccessMode = READ; (*pMyDisasm).Argument3.AccessMode = READ; + (*pMyDisasm).Argument4.AccessMode = READ; (void) memset (&(*pMyDisasm).Instruction, 0, sizeof (INSTRTYPE)); GV.TAB_ = (UInt32)(*pMyDisasm).Options & 0xff; GV.SYNTAX_ = (UInt32)(*pMyDisasm).Options & 0xff00; diff --git a/libIRDB/test/fill_in_cfg.cpp b/libIRDB/test/fill_in_cfg.cpp index 8b6959d0c0274532951c27a839ded160157fdb9a..b86e3aa6079cc3e2f705f31b4f42a86a1ec3e7cc 100644 --- a/libIRDB/test/fill_in_cfg.cpp +++ b/libIRDB/test/fill_in_cfg.cpp @@ -268,7 +268,7 @@ void add_new_instructions(FileIR_t *firp) virtual_offset_t second=elfiop.sections[secndx]->get_address()+elfiop.sections[secndx]->get_size(); /* is the missed instruction in this section */ - if(first<=missed_address && missed_address<=second) + if(first<=missed_address && missed_address<second) { const char* data=elfiop.sections[secndx]->get_data(); // second=data? @@ -281,6 +281,7 @@ void add_new_instructions(FileIR_t *firp) disasm.Options = NasmSyntax + PrefixedNumeral; disasm.Archi = firp->GetArchitectureBitWidth(); disasm.EIP = (UIntPtr) &data[offset_into_section]; + disasm.SecurityBlock=elfiop.sections[secndx]->get_size()-offset_into_section; disasm.VirtualAddr = missed_address; int instr_len = Disasm(&disasm); @@ -292,8 +293,12 @@ void add_new_instructions(FileIR_t *firp) /* if we found the instruction, but can't disassemble it, then we skip out for now */ if(instr_len==OUT_OF_RANGE || instr_len==UNKNOWN_OPCODE) { + if(getenv("VERBOSE_CFG")) + cout<<"Found invalid insn at "<<missed_address<<endl; break; } + else if(getenv("VERBOSE_CFG")) + cout<<"Found valid insn at "<<missed_address<<": "<<disasm.CompleteInstr<<endl; /* intel instructions have a max size of 16 */ assert(1<=instr_len && instr_len<=16);