
簡體中文 | 繁體中文(中國) | ENGLISH | русский язык
一款 x64dbg 自動化控制插件,通過Python控制x64dbg的行為,實作遠端動态調試,解決了逆向工作者分析程式,反病毒人員脫殼,漏洞分析者尋找指令片段,原生腳本不夠強大的問題,通過與Python相結合利用Python文法的靈活性以及其豐富的第三方庫,加速漏洞利用程式的開發,輔助漏洞挖掘以及惡意軟體分析。
Python 包請安裝與插件一緻的版本,在cmd指令行下執行pip指令即可安裝,推薦兩個包全部安裝。
- 安裝标準包:
或者pip install LyScript32
pip install LyScript64
- 安裝擴充包:
或者pip install LyScriptTools32
pip install LyScriptTools64
其次您需要手動下載下傳對應
x64dbg
版本的驅動檔案,并放入指定的
plugins
目錄下。
- 調試器下載下傳:snapshot_2022-09-11_15-59.zip
- 插件下載下傳:LyScript32-1.0.13 (32位插件) 或者 LyScript64-1.0.13 (64位插件)
插件下載下傳好以後,請将該插件複制到x64dbg的plugins目錄下,程式運作後會自動加載插件。
當插件加載成功後,會在日志位置看到具體的綁定資訊以及輸出調試,該插件并不會在插件欄顯示。
如果需要遠端調試,則隻需要在初始化
MyDebug()
類時傳入對端IP位址即可,如果不填寫參數則預設使用
127.0.0.1
位址,請確定對端放行了
6589
端口,否則無法連接配接。
運作x64dbg程式并手動載入需要分析的可執行檔案,然後我們可以通過
connect()
方法連接配接到調試器,連接配接後會建立一個持久會話直到python腳本結束則連接配接會被強制斷開,在此期間可調用
is_connect()
檢查該連結是否還存在,具體代碼如下所示。
from LyScript32 import MyDebug
if __name__ == "__main__":
# 初始化
dbg = MyDebug()
# 連接配接到調試器
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
# 檢測套接字是否還在
ref = dbg.is_connect()
print("是否在連接配接: ", ref)
dbg.close()
寄存器系列函數
get_register() 函數: 該函數主要用于實作,對特定寄存器的擷取操作,使用者需傳入需要擷取的寄存器名字即可。
- 參數1:傳入寄存器字元串
可用範圍:"DR0", "DR1", "DR2", "DR3", "DR6", "DR7", "EAX", "AX", "AH", "AL", "EBX", "BX", "BH", "BL", "ECX", "CX", "CH", "CL", "EDX", "DX", "DH", "DL", "EDI", "DI","ESI", "SI", "EBP", "BP", "ESP", "SP", "EIP", "CIP", "CSP", "CAX", "CBX", "CCX", "CDX", "CDI", "CSI", "CBP", "CFLAGS"
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eax = dbg.get_register("eax")
ebx = dbg.get_register("ebx")
print("eax = {}".format(hex(eax)))
print("ebx = {}".format(hex(ebx)))
dbg.close()
如果您使用的是64位插件,則寄存器的支援範圍将變為E系列加R系列。
可用範圍擴充: "DR0", "DR1", "DR2", "DR3", "DR6", "DR7", "EAX", "AX", "AH", "AL", "EBX", "BX", "BH", "BL", "ECX", "CX", "CH", "CL", "EDX", "DX", "DH", "DL", "EDI", "DI", "ESI", "SI", "EBP", "BP", "ESP", "SP", "EIP", "RAX", "RBX", "RCX", "RDX", "RSI", "SIL", "RDI", "DIL", "RBP", "BPL", "RSP", "SPL", "RIP", "R8", "R8D", "R8W", "R8B", "R9", "R9D", "R9W", "R9B", "R10", "R10D", "R10W", "R10B", "R11", "R11D", "R11W", "R11B", "R12", "R12D", "R12W", "R12B", "R13", "R13D", "R13W", "R13B", "R14", "R14D", "R14W", "R14B", "R15", "R15D", "R15W", "R15B"
from LyScript64 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
rax = dbg.get_register("rax")
eax = dbg.get_register("eax")
ax = dbg.get_register("ax")
print("rax = {} eax = {} ax ={}".format(hex(rax),hex(eax),hex(ax)))
r8 = dbg.get_register("r8")
print("擷取R系列寄存器: {}".format(hex(r8)))
dbg.close()
set_register() 函數: 該函數實作設定指定寄存器參數,同理64位将支援更多寄存器的參數修改。
- 參數1:傳入寄存器字元串
- 參數2:十進制數值
可用範圍:"DR0", "DR1", "DR2", "DR3", "DR6", "DR7", "EAX", "AX", "AH", "AL", "EBX", "BX", "BH", "BL", "ECX", "CX", "CH", "CL", "EDX", "DX", "DH", "DL", "EDI", "DI", "ESI", "SI", "EBP", "BP", "ESP", "SP", "EIP"
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eax = dbg.get_register("eax")
dbg.set_register("eax",100)
print("eax = {}".format(hex(eax)))
dbg.close()
get_flag_register() 函數: 用于擷取某個标志位參數,傳回值隻有真或者假。
- 參數1:寄存器字元串
可用寄存器範圍:"ZF", "OF", "CF", "PF", "SF", "TF", "AF", "DF", "IF"
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
cf = dbg.get_flag_register("cf")
print("标志: {}".format(cf))
dbg.close()
set_flag_register() 函數: 用于設定某個标志位參數,傳回值隻有真或者假。
- 參數1:寄存器字元串
- 參數2:[ 設定為真 True] / [設定為假 False]
可用寄存器範圍:"ZF", "OF", "CF", "PF", "SF", "TF", "AF", "DF", "IF"
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
zf = dbg.get_flag_register("zf")
print(zf)
dbg.set_flag_register("zf",False)
zf = dbg.get_flag_register("zf")
print(zf)
dbg.close()
調試系列函數
set_debug() 函數: 用于影響調試器,例如前進一次,後退一次,暫停調試,終止等。
- 參數1: 傳入需要執行的動作
可用動作範圍:[暫停 Pause] [運作 Run] [步入 StepIn] [步過 StepOut] [到結束 StepOver] [停止 Stop] [等待 Wait]
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
while True:
dbg.set_debug("StepIn")
eax = dbg.get_register("eax")
if eax == 0:
print("找到了")
break
dbg.close()
set_debug_count() 函數: 該函數是
set_debug()
函數的延續,目的是執行自動步過次數。
- 參數1:傳入需要執行的動作
- 參數2:執行重複次數
可用動作範圍:[暫停 Pause] [運作 Run] [步入 StepIn] [步過 StepOut] [到結束 StepOver] [停止 Stop] [等待 Wait]
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
dbg.set_debug_count("StepIn",10)
dbg.close()
is_debugger() /is_running()/is_run_locked() 函數: 函數
is_debugger
可用于驗證目前調試器是否處于調試狀态,
is_running
則用于驗證是否在運作,
is_run_locked()
用于檢查調試器是否被鎖定(暫停)。
- 無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.is_debugger()
print(ref)
ref = dbg.is_running()
print(ref)
ref = dbg.is_run_locked()
print(ref)
dbg.close()
set_breakpoint() 函數: 設定斷點與取消斷點進行了分離,設定斷點隻需要傳入十進制記憶體位址。
- 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
ref = dbg.set_breakpoint(eip)
print("設定狀态: {}".format(ref))
dbg.close()
delete_breakpoint() 函數: 該函數傳入一個記憶體位址,可取消一個記憶體斷點。
- 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
ref = dbg.set_breakpoint(eip)
print("設定狀态: {}".format(ref))
del_ref = dbg.delete_breakpoint(eip)
print("取消狀态: {}".format(del_ref))
dbg.close()
check_breakpoint() 函數: 用于檢查下過的斷點是否被命中,命中傳回True否則傳回False。
- 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
ref = dbg.set_breakpoint(eip)
print("設定狀态: {}".format(ref))
is_check = dbg.check_breakpoint(4134331)
print("是否命中: {}".format(is_check))
dbg.close()
get_all_breakpoint() 函數: 用于擷取目前調試程式中,所有下過的斷點資訊,包括是否開啟,命中次數等。
- 無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.get_all_breakpoint()
print(ref)
dbg.close()
set_hardware_breakpoint() 函數: 用于設定一個硬體斷點,硬體斷點在32位系統中最多設定4個。
- 參數1:記憶體位址(十進制)
- 參數2:斷點類型
斷點類型可用範圍:[類型 0 = HardwareAccess / 1 = HardwareWrite / 2 = HardwareExecute]
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug(address="127.0.0.1",port=6666)
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
ref = dbg.set_hardware_breakpoint(eip,2)
print(ref)
dbg.close()
delete_hardware_breakpoint() 函數: 用于删除一個硬體斷點,隻需要傳入位址即可,無需傳入類型。
- 參數1:記憶體位址(十進制)
斷點類型可用範圍:[類型 0 = HardwareAccess / 1 = HardwareWrite / 2 = HardwareExecute]
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug(address="127.0.0.1",port=6666)
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
ref = dbg.set_hardware_breakpoint(eip,2)
print(ref)
# 删除斷點
ref = dbg.delete_hardware_breakpoint(eip)
print(ref)
dbg.close()
is_bp_disable() 函數: 該函數用于驗證指定位址處BP斷點是否被禁用。
- 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
is_false = dbg.is_bp_disable(eip)
print("bp斷點狀态: {}".format(is_false))
dbg.close()
get_xref_count_at() 函數: 擷取指定記憶體位址位置處交叉引用計數。
- 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
types = dbg.get_xref_count_at(eip)
print("引用計數: {}".format(types))
dbg.close()
get_function_type_at() 函數: 擷取指定記憶體位址位置處函數類型,函數
FUNCTYPE
枚舉類型。
- 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
types = dbg.get_function_type_at(eip)
print("函數類型: {}".format(types))
if(types == 0):
print("FUNC_NONE")
elif(types == 1):
print("FUNC_BEGIN")
elif(types == 2):
print("FUNC_MIDDLE")
elif(types == 3):
print("FUNC_END")
elif(types == 4):
print("FUNC_SINGLE")
else:
print("error")
dbg.close()
get_bpx_type_at() 函數: 擷取指定位址處BP斷點類型,類型
BPXTYPE
枚舉。
- 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
types = dbg.get_bpx_type_at(eip)
print("BPX類型: {}".format(types))
if(types == 0):
print("bp_none")
elif(types == 1):
print("bp_normal")
elif(types == 2):
print("bp_hardware")
elif(types == 4):
print("bp_memory")
elif(types == 8):
print("bp_dll")
elif(types == 16):
print("bp_exception")
else:
print("error")
dbg.close()
get_xref_type_at() 函數: 得到指定記憶體位址位置處交叉引用類型,枚舉
XREFTYPE
類型。
- 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
types = dbg.get_xref_type_at(eip)
print("引用類型: {}".format(types))
if(types == 0):
print("XREF_NONE")
elif(types == 1):
print("XREF_DATA")
elif(types == 2):
print("XREF_JMP")
elif(types == 3):
print("XREF_CALL")
else:
print("error")
dbg.close()
子產品系列函數
get_module_base() 函數: 該函數可用于擷取程式載入的指定一個子產品的基位址。
- 參數1:子產品名字元串
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
user32_base = dbg.get_module_base("user32.dll")
print(user32_base)
dbg.close()
get_all_module() 函數: 用于輸出目前加載程式的所有子產品資訊,以字典的形式傳回。
- 參數:無參數
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.get_all_module()
for i in ref:
print(i)
print(ref[0])
print(ref[1].get("name"))
print(ref[1].get("path"))
dbg.close()
get_local_() 系列函數: 擷取目前EIP所在子產品基位址,長度,以及記憶體屬性,此功能無參數傳遞,擷取的是目前EIP所指向子產品的資料。
- dbg.get_local_base() 擷取子產品基位址
- dbg.get_local_size() 擷取子產品長度
- dbg.get_local_protect() 擷取子產品保護屬性
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.get_local_base()
print(hex(ref))
ref2 = dbg.get_local_size()
print(hex(ref2))
ref3 = dbg.get_local_protect()
print(ref3)
dbg.close()
get_module_from_function() 函數: 擷取指定子產品中指定函數的記憶體位址,可用于驗證目前程式在記憶體中指定函數的虛拟位址。
- 參數1:子產品名
- 參數2:函數名
成功傳回位址,失敗傳回false
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.get_module_from_function("user32.dll","MessageBoxW")
print(hex(ref))
ref2 = dbg.get_module_from_function("kernel32.dll","test")
print(ref2)
dbg.close()
get_module_from_import() 函數: 擷取目前程式中指定子產品的導入表資訊,輸出為清單嵌套字典。
- 參數1:傳入子產品名稱
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.get_module_from_import("ucrtbase.dll")
print(ref)
ref1 = dbg.get_module_from_import("win32project1.exe")
for i in ref1:
print(i.get("name"))
dbg.close()
get_module_from_export() 函數: 該函數用于擷取目前加載程式中的導出表資訊。
- 參數1:傳入子產品名
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.get_module_from_export("msvcr120d.dll")
for i in ref:
print(i.get("name"), hex(i.get("va")))
dbg.close()
get_section() 函數: 該函數用于輸出主程式中的節表資訊。
- 無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug(address="127.0.0.1",port=6666)
connect_flag = dbg.connect()
ref = dbg.get_section()
print(ref)
dbg.close()
get_base_from_address() 函數: 根據傳入的記憶體位址得到該子產品首位址。
- 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
ref = dbg.get_base_from_address(eip)
print("子產品首位址: {}".format(hex(ref)))
get_base_from_name() 函數: 根據傳入的子產品名得到該子產品所在記憶體首位址。
- 參數1:傳入子產品名
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
ref_base = dbg.get_base_from_name("win32project.exe")
print("子產品首位址: {}".format(hex(ref_base)))
dbg.close()
get_oep_from_name() 函數: 根據傳入的子產品名,擷取該子產品實際裝載OEP位置。
- 參數1:傳入子產品名
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
oep = dbg.get_oep_from_name("win32project.exe")
print(hex(oep))
dbg.close()
get_oep_from_address() 函數: 根據傳入記憶體位址,得到該位址子產品的OEP位置。
- 參數1:傳入記憶體位址
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
oep = dbg.get_oep_from_address(eip)
print(hex(oep))
dbg.close()
get_section_from_module_name() 函數: 使用者可傳入目前載入的子產品名,即可直接取出指定子產品的節表資訊。
- 參數1:子產品名(字元串)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
section_user32 = dbg.get_section_from_module_name("user32.dll")
print(section_user32)
section_ntdll = dbg.get_section_from_module_name("ntdll.dll")
print(section_ntdll)
dbg.close()
size_from_address() 函數: 傳入一個子產品的基位址得到該子產品占用總大小。
- 參數1:子產品位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
base = dbg.get_local_base()
print("子產品基位址: {}".format(hex(base)))
size = dbg.size_from_address(base)
print("子產品長度: {}".format(size))
dbg.close()
size_from_name() 函數: 傳入子產品名稱得到子產品占用總大小。
- 參數1:子產品名(字元串)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
size = dbg.size_from_name("win32.exe")
print("長度: {}".format(size))
dbg.close()
section_count_from_name() 函數: 傳入子產品名稱得到子產品有多少個節區。
- 參數1:子產品名(字元串)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
size = dbg.section_count_from_name("win32.exe")
print("節區個數: {}".format(size))
dbg.close()
section_count_from_address() 函數: 傳入子產品基址得到子產品有多少個節區。
- 參數1:子產品位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
base = dbg.get_local_base()
print("子產品基位址: {}".format(hex(base)))
size = dbg.section_count_from_address(base)
print("節個數: {}".format(size))
dbg.close()
path_from_name() 函數: 傳入子產品名稱得到子產品路徑。
- 參數1:子產品名(字元串)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
size = dbg.path_from_name("win32.exe")
print("子產品路徑: {}".format(size))
dbg.close()
path_from_address() 函數: 傳入子產品位址得到子產品路徑。
- 參數1:子產品位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
base = dbg.get_local_base()
print("子產品基位址: {}".format(hex(base)))
path = dbg.path_from_address(base)
print("子產品路徑: {}".format(path))
dbg.close()
name_from_address() 函數: 傳入子產品位址得到子產品名稱。
- 參數1:子產品位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
base = dbg.get_local_base()
print("子產品基位址: {}".format(hex(base)))
path = dbg.name_from_address(base)
print("子產品名: {}".format(path))
dbg.close()
get_window_handle() 函數: 取出自身程序子產品句柄。
- 參數:無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
base = dbg.get_window_handle()
print("程序句柄: {}".format(base))
dbg.close()
get_module_at() 函數: 擷取指定記憶體位址處子產品名,此處得到的子產品名無字尾。
- 參數1:子產品位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
ref = dbg.get_module_at(eip)
print("子產品名: {}".format(ref))
dbg.close()
get_local_module() 函數: 該系列函數可用于得到目前載入程式停留EIP位置的子產品詳細資訊。
- get_local_module_size() 擷取目前程式的大小
- get_local_module_section_Count() 擷取自身節數量
- get_local_module_path() 擷取被調試程式完整路徑
- get_local_module_name() 擷取自身子產品名
- get_local_module_entry() 擷取自身子產品入口
- get_local_module_base() 擷取自身子產品基位址
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
print("程式大小: {}".format( dbg.get_local_module_size()))
print("節個數: {}".format(dbg.get_local_module_section_Count()))
print("完整路徑: {}".format(dbg.get_local_module_path()))
print("子產品名: {}".format(dbg.get_local_module_name()))
print("子產品入口: {}".format(dbg.get_local_module_entry()))
print("子產品基位址: {}".format(dbg.get_local_module_base()))
dbg.close()
記憶體系列函數
read_memory_() 系列函數: 讀記憶體系列函數,包括 ReadByte,ReadWord,ReadDword 三種格式,在64位下才支援Qword
- 參數1:需要讀取的記憶體位址(十進制)
目前支援:
- read_memory_byte() 讀位元組
- read_memory_word() 讀word
- read_memory_dword() 讀dword
- read_memory_qword() 讀qword (僅支援64位)
- read_memory_ptr() 讀指針
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
ref = dbg.read_memory_byte(eip)
print(hex(ref))
ref2 = dbg.read_memory_word(eip)
print(hex(ref2))
ref3 = dbg.read_memory_dword(eip)
print(hex(ref3))
ref4 = dbg.read_memory_ptr(eip)
print(hex(ref4))
dbg.close()
write_memory_() 系列函數: 寫記憶體系列函數,WriteByte,WriteWord,WriteDWORD,WriteQword
- 參數1:需要寫入的記憶體
- 參數2:需要寫入的byte位元組
目前支援:
- write_memory_byte() 寫位元組
- write_memory_word() 寫word
- write_memory_dword() 寫dword
- write_memory_qword() 寫qword (僅支援64位)
- write_memory_ptr() 寫指針
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
addr = dbg.create_alloc(1024)
print(hex(addr))
ref = dbg.write_memory_byte(addr,10)
print(ref)
dbg.close()
scan_memory_one() 函數: 實作了記憶體掃描,當掃描到第一個符合條件的特征時,自動輸出。
- 參數1:特征碼字段
這個函數需要注意,如果我們的x64dbg工具停在系統領空,則會預設搜尋系統領空下的特征,如果想要搜尋程式領空裡面的資料,需要先将EIP切過去在操作。
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.scan_memory_one("ff 25")
print(ref)
dbg.close()
scan_memory_all() 函數: 實作了掃描所有符合條件的特征字段,找到後傳回一個清單。
- 參數1:特征碼字段
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.scan_memory_all("ff 25")
for index in ref:
print(hex(index))
dbg.close()
scan_memory_any() 函數: 該函數可實作對特定位置,向下掃描特定長度的特征字段。
- 參數1:掃描起始位址(十進制)
- 參數2:掃描長度(十進制)
- 參數3:特征碼字段
from LyScript32 import MyDebug
if __name__ == "__main__":
# 初始化
dbg = MyDebug()
# 連接配接到調試器
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
# 任意位址掃描
eip = dbg.get_register("eip")
ref = dbg.scan_memory_any(eip,1024,"8b 50 04 8b fe")
print("得到掃描結果: {}".format(hex(ref)))
dbg.close()
get_local_protect() 函數: 擷取記憶體屬性傳值,該函數進行更新,取消了隻能得到EIP所指的位置的記憶體屬性,使用者可随意檢測。
- 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
print(eip)
ref = dbg.get_local_protect(eip)
print(ref)
set_local_protect() 函數: 新增設定記憶體屬性函數,傳入eip記憶體位址,設定屬性32,以及設定記憶體長度1024即可。
- 參數1:記憶體位址(十進制)
- 參數2:權限類型(32=執行/讀取 30=執行 2=讀取/寫入)
- 參數3:屬性長度(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
print(eip)
b = dbg.set_local_protect(eip,32,1024)
print("設定屬性狀态: {}".format(b))
dbg.close()
get_local_page_size() 函數: 用于擷取目前EIP所指領空下,記憶體pagesize分頁大小。
- 無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
size = dbg.get_local_page_size()
print("pagesize = {}".format(size))
dbg.close()
get_memory_section() 函數: 該函數主要用于擷取記憶體映像中,目前調試程式的記憶體節表資料。
- 無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.get_memory_section()
print(ref)
dbg.close()
is_jmp_going_to_execute() 函數: 判斷記憶體位址是否跳轉到可執行記憶體塊。
- 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
flag = dbg.is_jmp_going_to_execute(eip)
print("是否是跳轉(是否可執行): {}".format(flag))
dbg.close()
mem_find_base_addr() 函數: 傳回特定位置處記憶體子產品基位址和大小,以字典形式傳回。
- 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
dic = dbg.mem_find_base_addr(eip)
print("記憶體基位址: {}".format(hex(dic.get("base"))))
print("記憶體大小: {}".format(dic.get("size")))
dbg.close()
mem_get_page_size() 函數: 得到指定位置處記憶體頁面長度。
- 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
addr = dbg.mem_get_page_size(eip)
print("記憶體頁面長度: {}".format(hex(addr)))
dbg.close()
mem_is_valid() 函數: 驗證指定位置處記憶體位址是否可讀取。
- 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
is_read = dbg.mem_is_valid(eip)
print("記憶體位址屬性: {}".format(is_read))
dbg.close()
堆棧系列函數
create_alloc() 函數: 函數
create_alloc()
可在遠端開辟一段堆空間,成功傳回記憶體首位址。
- 參數1:開辟的堆長度(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.create_alloc(1024)
print("開辟位址: ", hex(ref))
dbg.close()
delete_alloc() 函數: 函數
delete_alloc()
用于登出一個遠端堆空間。
- 參數1:傳入需要删除的堆空間記憶體位址。
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.create_alloc(1024)
print("開辟位址: ", hex(ref))
flag = dbg.delete_alloc(ref)
print("删除狀态: ",flag)
dbg.close()
push_stack() 函數: 将一個十進制數壓入堆棧中,預設在堆棧棧頂。
- 參數1:十進制資料
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.push_stack(10)
print(ref)
dbg.close()
pop_stack() 函數: pop函數用于從堆棧中推出一個元素,預設從棧頂彈出。
- 無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
tt = dbg.pop_stack()
print(tt)
dbg.close()
peek_stack() 函數: peek則用于檢查堆棧内的參數,可設定偏移值,不設定則預設檢查第一個也就是棧頂。
- 參數1:十進制偏移
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
# 無參數檢查
check = dbg.peek_stack()
print(check)
# 攜帶參數檢查
check_1 = dbg.peek_stack(2)
print(check_1)
dbg.close()
程序線程系列函數
get_thread_list() 函數: 該函數可輸出目前程序所有在運作的線程資訊。
- 無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.get_thread_list()
print(ref[0])
print(ref[1])
dbg.close()
get_process_handle() 函數: 用于擷取目前程序句柄資訊。
- 無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.get_process_handle()
print(ref)
dbg.close()
get_process_id() 函數: 用于擷取目前加載程式的PID
- 無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.get_process_id()
print(ref)
dbg.close()
get_teb_address() / get_peb_address() 系列函數: 用于擷取目前程序環境塊,和線程環境快。
- get_teb_address() 傳入參數是線程ID
- get_peb_address() 傳入參數是程序ID
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.get_teb_address(6128)
print(ref)
ref = dbg.get_peb_address(9012)
print(ref)
dbg.close()
反彙編系列函數
get_disasm_code() 函數: 該函數主要用于對特定記憶體位址進行反彙編,傳入兩個參數。
- 參數1:需要反彙編的位址(十進制)
- 參數2:需要向下反彙編的長度
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
# 得到EIP位置
eip = dbg.get_register("eip")
# 反彙編前100行
disasm_dict = dbg.get_disasm_code(eip,100)
for ds in disasm_dict:
print("位址: {} 反彙編: {}".format(hex(ds.get("addr")),ds.get("opcode")))
dbg.close()
get_disasm_one_code() 函數: 在使用者指定的位置讀入一條彙編指令,使用者可根據需要對其進行判斷。
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
print("EIP = {}".format(eip))
disasm = dbg.get_disasm_one_code(eip)
print("反彙編一條: {}".format(disasm))
dbg.close()
get_disasm_operand_code() 函數: 用于擷取彙編指令中的操作數,例如
jmp 0x0401000
其操作數就是
0x0401000
。
- 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
print("EIP = {}".format(eip))
opcode = dbg.get_disasm_operand_code(eip)
print("操作數: {}".format(hex(opcode)))
dbg.close()
get_disasm_operand_size() 函數: 用于得目前記憶體位址下彙編代碼的機器碼長度。
- 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
print("EIP = {}".format(eip))
opcode = dbg.get_disasm_operand_size(eip)
print("機器碼長度: {}".format(hex(opcode)))
dbg.close()
assemble_write_memory() 函數: 實作了使用者傳入一段正确的彙編指令,程式自動将該指令轉為機器碼,并寫入到指定位置。
- 參數1:寫出記憶體位址(十進制)
- 參數2:寫出彙編指令
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
print(eip)
ref = dbg.assemble_write_memory(eip,"mov eax,1")
print("是否寫出: {}".format(ref))
dbg.close()
assemble_code_size() 函數: 該函數實作了使用者傳入一個彙編指令,自動計算出該指令占多少個位元組。
- 參數1:彙編指令字元串
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.assemble_code_size("sub esp, 0x324")
print(ref)
dbg.close()
get_branch_destination() 函數: 擷取call或者是jx跳轉指令的跳轉位址。
- 參數1:擷取記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
print("目前EIP位址: {}".format(hex(eip)))
value = dbg.get_branch_destination(eip)
print("操作數: {}".format(hex(value)))
dbg.close()
get_disassembly() 函數: 反彙編一條指令,此函數直接輸出調試其中看到的,包括符号。
- 參數1:擷取記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
print("目前EIP位址: {}".format(hex(eip)))
dasm = dbg.get_disassembly(eip)
print("反彙編一條: {}".format(dasm))
dbg.close()
assemble_at() 函數: 彙編系列函數,傳入一條彙編指令,直接将指令寫出到記憶體。
- 參數1:擷取記憶體位址(十進制)
- 參數2:彙編指令(字元串)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
print("目前EIP位址: {}".format(hex(eip)))
ref = dbg.assemble_at(eip,"nop")
print("寫出狀态: {}".format(ref))
dbg.close()
disasm_fast_at() 函數: 該函數同樣是反彙編一行并傳回字典,但它可以擷取到更多有效參數。
- 參數1:擷取記憶體位址(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
print("目前EIP位址: {}".format(hex(eip)))
dasm = dbg.disasm_fast_at(eip)
print("位址: {}".format(hex(dasm.get("addr"))))
print("彙編指令: {}".format(dasm.get("disasm")))
print("彙編長度: {}".format(dasm.get("size")))
print("是否分支: {}".format(dasm.get("is_branch")))
print("是否call: {}".format(dasm.get("is_call")))
print("類型: {}".format(dasm.get("type")))
dbg.close()
其他系列函數
set_comment_notes() 函數: 給指定位置代碼增加一段注釋,如下示範在eip位置增加注釋。
- 參數1:注釋記憶體位址
- 參數2:注釋内容
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
eip = dbg.get_register("eip")
ref = dbg.set_comment_notes(eip,"hello lyshark")
print(ref)
dbg.close()
run_command_exec() 函數: 執行内置指令,例如bp,dump等。
- 參數1:指令語句
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
ref = dbg.run_command_exec("bp MessageBoxA")
print(ref)
dbg.close()
set_loger_output() 函數: 日志的輸出尤為重要,該子產品提供了自定義日志輸出功能,可将指定日志輸出到x64dbg日志位置。
- 參數1:日志内容
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
for i in range(0,100):
ref = dbg.set_loger_output("hello lyshark -> {} \n".format(i))
print(ref)
dbg.close()
run_command_exe_ref() 函數: 該函數是
run_command_exec()
的延申,其主要增加了傳出參數的功能,目前可傳出整數類型。
- 參數1:指令語句
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
ref = dbg.run_command_exe_ref("mod.base(eip)")
print("傳回參數: {}".format(hex(ref)))
dbg.close()
set_status_bar_message() 函數: 該函數可實作在x64dbg底部狀态欄上面輸出一個使用者傳入的字元串。
- 參數1:輸出字元串
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
dbg.set_status_bar_message("EIP => {}".format(hex(eip)))
dbg.close()
script_loader() 函數: 該函數接收使用者傳入的内置腳本所在路徑,并将該腳本加載到x64dbg中。
- 參數1:腳本路徑
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
flag = dbg.script_loader("d://x64dbg_script.txt")
print("傳回值: {}".format(flag))
dbg.close()
script_unloader() 函數: 該函數用于關閉x64dbg中打開的腳本。
- 參數:無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
flag = dbg.script_loader("d://x64dbg_script.txt")
print("傳回值: {}".format(flag))
dbg.script_unloader()
dbg.close()
script_run() 函數: 該函數用于運作一個已經載入到x64dbg中的腳本。
- 參數1:運作條數(可空)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
flag = dbg.script_loader("d://x64dbg_script.txt")
print("傳回值: {}".format(flag))
dbg.script_run()
dbg.close()
script_set_ip() 函數: 該函數用于指定從第幾行開始運作腳本。
- 參數1:運作下标
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
flag = dbg.script_loader("d://x64dbg_script.txt")
print("傳回值: {}".format(flag))
dbg.script_set_ip(3)
dbg.close()
open_debug() 函數: 該函數用于打開磁盤中的一個被調試程式。
- 參數1:被打開程式完整路徑
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
flag = dbg.open_debug("d://win32.exe")
dbg.close()
close_debug() 函數: 該函數用于關閉目前打開的調試程式,之關閉程式不關閉調試器。
- 參數:無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
flag = dbg.open_debug("d://win32.exe")
if flag == True:
dbg.close_debug()
dbg.close()
detach_debug() 函數: 該函數用于讓調試器脫離程序,程序會被運作起來。
- 參數:無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
flag = dbg.open_debug("d://win32.exe")
if flag == True:
dbg.detach_debug()
dbg.close()
message_box() 函數: 此功能提供了三種對話框,一種可輸入文本,一種判斷是否選中,另一種則是普通彈窗。
- 參數1:彈出的提示資訊
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
conn = dbg.connect()
# 彈出輸入框
flag = dbg.input_string_box("請輸入反彙編入口位址?")
print("使用者的輸入: {}".format(flag))
# 彈出是否框
flag = dbg.message_box_yes_no("是否繼續執行脫殼操作?")
if flag == True:
print("脫殼")
else:
print("退出")
# 提示框
flag = dbg.message_box("這是第 {} 次,異常了".format(1))
print("狀态: {}".format(flag))
dbg.close()
set_argument_brackets() 函數: 該函數可在
注釋
處增加括号。
- 參數1:開始位置(十進制)
- 參數2:結束位置(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
ref = dbg.set_argument_brackets(eip, eip +100)
print("是否增加注釋: {}".format(ref))
dbg.close()
del_argument_brackets() 函數: 該函數可清除通過
set_argument_brackets
設定的括号。
- 參數1:開始位置(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
dbg.del_argument_brackets(eip)
dbg.close()
set_function_brackets() 函數: 該函數可實作在
機器碼
位置增加括号。
- 參數1:開始位置(十進制)
- 參數2:結束位置(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
flag = dbg.set_function_brackets(eip,eip+10)
dbg.close()
del_function_brackets() 函數: 該函數可清除通過
del_function_brackets
設定的括号。
- 參數1:開始位置(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
dbg.del_function_brackets(eip)
dbg.close()
set_loop_brackets() 函數: 該函數可實作在
反彙編
位置增加括号。
- 參數1:開始位置(十進制)
- 參數2:結束位置(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
ref = dbg.set_loop_brackets(eip,eip + 10)
print("設定狀态: {}".format(ref))
dbg.close()
del_loop_brackets() 函數: 該函數可清除通過
set_loop_brackets
設定的括号。
- 參數1:清除層級(預設1)
- 參數2:開始位置(十進制)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
ref = dbg.del_loop_brackets(1,eip)
print("清除狀态: {}".format(ref))
dbg.close()
set_label_at() 函數: 該函數可在特定位置設定一個标簽。
- 參數1:設定标簽的位址(十進制)
- 參數2:标簽名(字元串)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
dbg.set_label_at(eip,"test1")
dbg.set_label_at(eip+10,"test2")
dbg.close()
location_label_at() 函數: 該函數可通過已有的标簽定位到所在位置,并傳回記憶體位址。
- 參數1:标簽名(字元串)
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
eip = dbg.get_register("eip")
lab_addr = dbg.location_label_at("test2")
print("标簽所在記憶體: {}".format(hex(lab_addr)))
dbg.close()
clear_label() 函數: 該函數用于清除目前程式内所有的标簽。
- 參數:無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
ref = dbg.clear_label()
dbg.close()
update_all_view() 函數: 重新整理試圖函數,與切換CPU位置。
- 參數:無參數傳遞
from LyScript32 import MyDebug
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("連接配接狀态: {}".format(connect_flag))
# 重新整理試圖
dbg.update_all_view()
# 切換到CPU視窗
dbg.switch_cpu()
# 清除所有日志
dbg.clear_log()
dbg.close()
文章作者: lyshark (王瑞)
文章出處:https://www.cnblogs.com/LyShark/p/16053906.html
版權聲明:本部落格文章與代碼均為學習時整理的筆記,文章
[均為原創]作品,轉載請
[添加出處],您添加出處是我創作的動力!
轉載文章,請遵守
《中華人民共和國著作權法》相關規定或遵守
《署名CC BY-ND 4.0國際》禁止演繹規範,合理合規,攜帶原創出處轉載。