LyScript獲取上一條與下一條匯編指令得方法詳解

LyScript 插件默認并沒有提供上一條與下一條匯編指令得獲取功能,當然你可以使用LyScriptTools工具包直接調用內置命令得到,不過這種方式顯然在效率上并不理想,我們需要在LyScript插件API基礎上自己封裝實現這個功能。

LyScript項目地址:https://github.com/lyshark/LyScript

獲取下一條匯編指令

下一條匯編指令得獲取需要注意如果是被命中得指令則此處應該是CC斷點占用一個字節,如果不是則正常獲取到當前指令即可。

1.我們需要檢查當前內存斷點是否被命中,如果沒有命中則說明此處我們需要獲取到原始得匯編指令長度,然后與當前eip地址相加獲得。

2.如果命中了斷點,則此處有兩種情況

1.1 如果是用戶下得斷點,則此處調試器會在指令位置替換為CC,也就是匯編中得init停機指令,該指令占用1個字節,需要eip+1得到。

1.2 如果是系統斷點,EIP所停留得位置,則我們需要正常獲取當前指令地址,此處調試器沒有改動匯編指令僅僅只下下了異常斷點。

from LyScript32 import MyDebug# 獲取當前EIP指令得下一條指令def get_disasm_next(dbg,eip):    next = 0    # 檢查當前內存地址是否被下了絆子    check_breakpoint = dbg.check_breakpoint(eip)    # 說明存在斷點,如果存在則這里就是一個字節了    if check_breakpoint == True:        # 接著判斷當前是否是EIP,如果是EIP則需要使用原來得字節        local_eip = dbg.get_register("eip")        # 說明是EIP并且命中了斷點        if local_eip == eip:            dis_size = dbg.get_disasm_operand_size(eip)            next = eip + dis_size            next_asm = dbg.get_disasm_one_code(next)            return next_asm        else:            next = eip + 1            next_asm = dbg.get_disasm_one_code(next)            return next_asm        return None    # 不是則需要獲取到原始匯編代碼得長度    elif check_breakpoint == False:        # 得到當前指令長度        dis_size = dbg.get_disasm_operand_size(eip)        next = eip + dis_size        next_asm = dbg.get_disasm_one_code(next)        return next_asm    else:        return Noneif __name__ == "__main__":    dbg = MyDebug()    dbg.connect()    eip = dbg.get_register("eip")    next = get_disasm_next(dbg,eip)    print("下一條指令: {}".format(next))    prev = get_disasm_next(dbg,12391436)    print("下一條指令: {}".format(prev))    dbg.close()

獲取結果如下:

獲取上一條匯編指令

上一條指令得獲取難點就在于,我們無法確定當前指令得上一條指令到底有多長,所以只能用笨辦法,逐行掃描對比匯編指令,如果找到則取出其上一條指令即可。

from LyScript32 import MyDebug# 獲取當前EIP指令得上一條指令def get_disasm_prev(dbg,eip):    prev_dasm = None    # 得到當前匯編指令    local_disasm = dbg.get_disasm_one_code(eip)    # 只能向上掃描10行    eip = eip - 10    disasm = dbg.get_disasm_code(eip,10)    # 循環掃描匯編代碼    for index in range(0,len(disasm)):        # 如果找到了,就取出他得上一個匯編代碼        if disasm[index].get("opcode") == local_disasm:            prev_dasm = disasm[index-1].get("opcode")            break    return prev_dasmif __name__ == "__main__":    dbg = MyDebug()    dbg.connect()    eip = dbg.get_register("eip")    next = get_disasm_prev(dbg,eip)    print("上一條指令: {}".format(next))    dbg.close()

輸出效果如下:

到此這篇關于LyScript獲取上一條與下一條匯編指令得方法詳解得內容就介紹到這了,更多相關LyScript獲取匯編指令內容請搜索之家以前得內容或繼續瀏覽下面得相關內容希望大家以后多多支持之家!

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論1 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 两个人看的WWW在线观看| 丰满老熟妇好大bbbbb| 福利视频导航网站| 国产精品成人久久久久久久| 久久99精品九九九久久婷婷| 欧美日韩在线一区| 动漫美女被免费漫画| 国产4tube在线播放| 夜夜爽一区二区三区精品| 久久五月精品中文字幕| 欧美日韩中文国产va另类| 公车上玩两个处全文阅读| 黄色网页免费观看| 国内最真实的XXXX人伦| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲免费人成在线视频观看| 秋葵视频在线观看在线下载| 国产又猛又黄又爽| 2019国产精品| 天天影院成人免费观看| 久久777国产线看观看精品| 柳岩老师好紧好爽再浪一点| 天天操天天干天天透| 久久久国产精品| 欧美人与性动交另类| 国产三级无码内射在线看| 波多野结衣33| 无码专区人妻系列日韩精品| 亚洲av色无码乱码在线观看| 激情国产AV做激情国产爱| 午夜福利一区二区三区高清视频| 黄色性生活毛片| 国产精品特黄一级国产大片| eeuss影院www天堂免费| 成人理论电影在线观看| 久久国产精品免费看| 橘梨纱视频一区二区在线观看| 亚洲精品国产成人中文| 精品久久久久久| 四虎影8818| 观看国产色欲色欲色欲www|