亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

LyScript項(xiàng)目地址:https://github.com/lyshark/LyScript

獲取下一條匯編指令

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

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

2.如果命中了斷點(diǎn),則此處有兩種情況

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

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

from LyScript32 import MyDebug

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

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

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

        # 接著判斷當(dāng)前是否是EIP,如果是EIP則需要使用原來的字節(jié)
        local_eip = dbg.get_register("eip")

        # 說明是EIP并且命中了斷點(diǎn)
        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:
        # 得到當(dāng)前指令長度
        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é)果如下:

獲取上一條匯編指令

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

from LyScript32 import MyDebug

# 獲取當(dāng)前EIP指令的上一條指令
def get_disasm_prev(dbg,eip):
    prev_dasm = None
    # 得到當(dāng)前匯編指令
    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三方庫,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Python urlopen()函數(shù) 示例分享

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

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

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

    這篇文章主要介紹了Python實(shí)現(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)精度問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    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訓(xùn)練

    pytorch 如何使用float64訓(xùn)練

    這篇文章主要介紹了pytorch 使用float64訓(xùn)練的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    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命令行中引導(dǎo)用戶指定選擇路徑

    Python命令行中引導(dǎo)用戶指定選擇路徑

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

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

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

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

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

最新評論