最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間: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)這個(gè)功能。

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

獲取下一條匯編指令

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

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

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

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

1.2 如果是系統(tǒng)斷點(diǎn),EIP所停留的位置,則我們需要正常獲取當(dāng)前指令地址,此處調(diào)試器沒有改動(dòng)匯編指令僅僅只下下了異常斷點(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),如果存在則這里就是一個(gè)字節(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

    # 不是則需要獲取到原始匯編代碼的長(zhǎng)度
    elif check_breakpoint == False:
        # 得到當(dāng)前指令長(zhǎ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)前指令的上一條指令到底有多長(zhǎng),所以只能用笨辦法,逐行掃描對(duì)比匯編指令,如果找到則取出其上一條指令即可。

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)):
        # 如果找到了,就取出他的上一個(gè)匯編代碼
        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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • windows下Virtualenvwrapper安裝教程

    windows下Virtualenvwrapper安裝教程

    這篇文章主要為大家詳細(xì)介紹了windows下Virtualenvwrapper安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 解決python nohup linux 后臺(tái)運(yùn)行輸出的問題

    解決python nohup linux 后臺(tái)運(yùn)行輸出的問題

    今天小編就為大家分享一篇解決python nohup linux 后臺(tái)運(yùn)行輸出的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python實(shí)現(xiàn)在Excel中繪制可視化大屏的方法詳解

    Python實(shí)現(xiàn)在Excel中繪制可視化大屏的方法詳解

    今天小編來給大家分享如何在Excel文檔當(dāng)中來繪制可視化圖表,并且制作一個(gè)可視化大屏。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-01-01
  • Appium+Python自動(dòng)化測(cè)試之運(yùn)行App程序示例

    Appium+Python自動(dòng)化測(cè)試之運(yùn)行App程序示例

    這篇文章主要介紹了Appium+Python自動(dòng)化測(cè)試之運(yùn)行App程序示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Python基礎(chǔ)globlal nonlocal和閉包函數(shù)裝飾器語法糖

    Python基礎(chǔ)globlal nonlocal和閉包函數(shù)裝飾器語法糖

    這篇文章主要為大家介紹了Python基礎(chǔ)globlal nonlocal和閉包函數(shù)裝飾器語法糖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • python通過郵件服務(wù)器端口發(fā)送郵件的方法

    python通過郵件服務(wù)器端口發(fā)送郵件的方法

    這篇文章主要介紹了python通過郵件服務(wù)器端口發(fā)送郵件的方法,涉及Python發(fā)送郵件的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 實(shí)例詳解Python中的numpy.abs和abs函數(shù)

    實(shí)例詳解Python中的numpy.abs和abs函數(shù)

    Numpy是python中最有用的工具之一,它可以有效地處理大容量數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Python中numpy.abs和abs函數(shù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • pycharm 2018 激活碼及破解補(bǔ)丁激活方式

    pycharm 2018 激活碼及破解補(bǔ)丁激活方式

    這篇文章主要介紹了pycharm 2018 激活碼及破解補(bǔ)丁激活方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • python完全卸載三種方法教程

    python完全卸載三種方法教程

    通常我們?cè)谛遁dpyhton時(shí)會(huì)直接使用電腦自備的管家軟件中的卸載功能,但是通常這并不會(huì)卸載干凈,特別是當(dāng)你卸載完python一個(gè)版本之后,重新安裝另一個(gè)版本就會(huì)出錯(cuò),這篇文章主要給大家介紹了關(guān)于python完全卸載三種方法的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • Python中發(fā)布Web應(yīng)用的常見方法與對(duì)比

    Python中發(fā)布Web應(yīng)用的常見方法與對(duì)比

    這篇文章主要為大家詳細(xì)介紹了Python中發(fā)布?Web?應(yīng)用的幾種常見方法的實(shí)現(xiàn)詳細(xì)步驟以及它們的部署方法對(duì)比,有需要的小伙伴可以參考下
    2025-02-02

最新評(píng)論

阜平县| 阳泉市| 中卫市| 锦州市| 漳平市| 车险| 福泉市| 邹城市| 抚远县| 咸丰县| 瑞金市| 龙口市| 乌苏市| 遂川县| 犍为县| 台中市| 突泉县| 九龙城区| 永川市| 道真| 永嘉县| 昌平区| 康保县| 山阳县| 荔波县| 滁州市| 博兴县| 常宁市| 施甸县| 惠安县| 加查县| 勐海县| 逊克县| 广宁县| 万载县| 富川| 镇安县| 漳平市| 黄龙县| 丁青县| 安化县|