我有一个从address+1开始定义的指令,在address一个字节。我想从address+1开始取消定义指令,然后使用address或类似的方法从MakeCode重新定义它们。有什么指针可以指示我要去哪里?

评论

MakeUnkn()(请参阅atfensivecomputing.net/papers/IDAPythonIntro.pdf第48页)可能是您正在寻找的东西。

#1 楼

这是我前一段时间写的一些代码的POC。

def fixTheJmpCalls():
    # kind of slow to loop through all the functions and instructions but it works 
    # flaw: only defined functions will be traversed.this. 
    for funcea in Functions( SegStart( here() ), SegEnd( here() ) ):
        for eai in FuncItems(funcea):
            if GetMnem(eai) == "jmp" or GetMnem(eai) == "call":
                if GetDisasm(eai)[-2:-1] == "+" and GetDisasm(eai)[-1:].isdigit():
                    print "Broken Instruction: %X"%eai, GetDisasm(eai)
                    code_addr = GetOperandValue(eai, 0) 
                    fix_addr = code_addr -1 
                    MakeUnkn(fix_addr,1)
                    MakeCode(code_addr)