欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2022年07月28日 11:17:29   作者:lyshark  
LyScript 插件默認并沒有提供上一條與下一條匯編指令的獲取功能,當然你可以使用LyScriptTools工具包直接調(diào)用內(nèi)置命令得到,本文就為大家詳細講講如何實現(xiàn)

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

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

獲取下一條匯編指令

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

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

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

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

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

from LyScript32 import MyDebug

# 獲取當前EIP指令的下一條指令
def get_disasm_next(dbg,eip):
    next = 0

    # 檢查當前內(nèi)存地址是否被下了絆子
    check_breakpoint = dbg.check_breakpoint(eip)

    # 說明存在斷點,如果存在則這里就是一個字節(jié)了
    if check_breakpoint == True:

        # 接著判斷當前是否是EIP,如果是EIP則需要使用原來的字節(jié)
        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 None

if __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()

獲取結(jié)果如下:

獲取上一條匯編指令

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

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)

    # 循環(huán)掃描匯編代碼
    for index in range(0,len(disasm)):
        # 如果找到了,就取出他的上一個匯編代碼
        if disasm[index].get("opcode") == local_disasm:
            prev_dasm = disasm[index-1].get("opcode")
            break

    return prev_dasm

if __name__ == "__main__":
    dbg = MyDebug()
    dbg.connect()

    eip = dbg.get_register("eip")

    next = get_disasm_prev(dbg,eip)
    print("上一條指令: {}".format(next))

    dbg.close()

輸出效果如下:

到此這篇關(guān)于LyScript獲取上一條與下一條匯編指令的方法詳解的文章就介紹到這了,更多相關(guān)LyScript獲取匯編指令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++通過內(nèi)嵌解釋器調(diào)用Python及間接調(diào)用Python三方庫

    C++通過內(nèi)嵌解釋器調(diào)用Python及間接調(diào)用Python三方庫

    本文主要介紹了C++通過內(nèi)嵌解釋器調(diào)用Python及間接調(diào)用Python三方庫,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Python urlopen()函數(shù) 示例分享

    Python urlopen()函數(shù) 示例分享

    urlopen(url, data=None, proxies=None) 即創(chuàng)建一個表示遠程url的類文件對象,然后像本地文件一樣操作這個類文件對象來獲取遠程數(shù)據(jù)。參數(shù)url表示遠程數(shù)據(jù)的路徑,一般是網(wǎng)址;參數(shù)data表示以post方式提交到url的數(shù)據(jù);參數(shù)proxies用于設(shè)置代理。
    2014-06-06
  • Python實現(xiàn)文件按照日期命名的方法

    Python實現(xiàn)文件按照日期命名的方法

    這篇文章主要介紹了Python實現(xiàn)文件按照日期命名的方法,涉及Python針對文件的遍歷、讀寫及時間操作相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • python調(diào)用dll出現(xiàn)精度問題解決

    python調(diào)用dll出現(xiàn)精度問題解決

    本文主要介紹了python調(diào)用dll出現(xiàn)精度問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • 淺談Python中re.match()和re.search()的使用及區(qū)別

    淺談Python中re.match()和re.search()的使用及區(qū)別

    這篇文章主要介紹了淺談Python中re.match()和re.search()的使用及區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • pytorch 如何使用float64訓練

    pytorch 如何使用float64訓練

    這篇文章主要介紹了pytorch 使用float64訓練的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python中functools模塊函數(shù)解析

    Python中functools模塊函數(shù)解析

    這篇文章主要介紹了Python中functools模塊的常用函數(shù)解析,分別講解了functools.cmp_to_key,functools.total_ordering,functools.reduce,functools.partial,functools.update_wrapper和functools.wraps的用法,需要的朋友可以參考下
    2017-03-03
  • Python命令行中引導用戶指定選擇路徑

    Python命令行中引導用戶指定選擇路徑

    這篇文章主要為大家介紹了命令行中引導用戶指定選擇路徑,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • python函數(shù)默認參數(shù)使用避坑指南

    python函數(shù)默認參數(shù)使用避坑指南

    這篇文章主要為大家介紹了python函數(shù)默認參數(shù)使用的踩雷避坑詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Scrapy中如何向Spider傳入?yún)?shù)的方法實現(xiàn)

    Scrapy中如何向Spider傳入?yún)?shù)的方法實現(xiàn)

    這篇文章主要介紹了Scrapy中如何向Spider傳入?yún)?shù)的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09

最新評論