0
내가 회색 모자 파이썬을 읽고 있어요
는 ,, 나는이 오류 ::간단한 디버거가 작동합니까?
Traceback (most recent call last):
File "C:/Python26/dbgpy/my_test.py", line 5, in <module>
debugger.attach(int(pid))
File "C:/Python26/dbgpy\my_dbg.py", line 37, in attach
h_process = self.attach(pid)
...........
...........
...........
File "C:/Python26/dbgpy\my_dbg.py", line 37, in attach
h_process = self.attach(pid)
File "C:/Python26/dbgpy\my_dbg.py", line 37, in attach
h_process = self.attach(pid)
RuntimeError: maximum recursion depth exceeded
을 받기 ::
class debugger():
def __init__(self):
self.h_process = None
self.pid = None
self.debugger_active = False
def load(self,path_to_exe):
creation_flags = DEBUG_PROCESS
startupinfo = STARTUPINFO()
process_information = PROCESS_INFORMATION()
startupinfo.dwFlags = 0x1
startupinfo.wShowWindows = 0x0
startupinfo.cb = sizeof(startupinfo)
if kernel32.CreateProcessA(path_to_exe,
None,
None,
None,
None,
creation_flags,
None,
None,
byref(startupinfo),
byref(process_information)):
print "[*] We have successfully launched the process!"
print "[*] PID: %d"%(process_information.dwProcessId)
self.h_process = self.open_process(process_information.dwProcessId)
else:
print "[*] Error: 0x%08x."%(kernel32.GetLastError())
def open_process(self,pid):
h_process = self.open_process(pid)
if kernel32.DebugActiveProcess(pid):
self.debugger_active = True
self.pid = int(pid)
self.run()
else:
print "[*] Unable to attach to the process."
def run(self):
while self.debugger_active == True:
self.get_debug_event()
def get_debug_event(self):
debug_event = DEBUG_EVENT()
continue_status = DBG_CONTINUE
if kernel32.WaitForDebugEvent(byref(debug_event), INFINITE):
raw_input("Press a Key to continue...")
self.debugger_active = False
kernel32.ContinueDebugEvent(\
debug_event.dwProcessId, \
debug_event.dwThreadId, \
continue_status)
def detach(self):
if kernel32.DebugActiveProcessStop(self.pid):
print "[*] Finished debugging. Exiting..."
return True
else:
print "There was an error"
return False
실행 my_test.py ::
import my_dbg
debugger = my_dbg.debugger()
pid = raw_input('Enter the PID of the process to attach to: ')
debugger.open_process(int(pid))
debugger.detach()
도달
왜냐하면 루프와 다른 것,하지만 그것이 무엇입니까 ?? 나는 Python2.6.4를 사용하여 Windows에서 실행 해요 .. :)
업데이트 ::
찾을 문제 덕분에 모든 ,, 코드가 작동 큰 :
from ctypes import *
from my_dbg_def import *
kernel32 = windll.kernel32
class debugger():
def __init__(self):
self.h_process = None
self.pid = None
self.debugger_active = False
def open_process(self,pid):
h_process = kernel32.OpenProcess(PROCESS_ALL_ACCESS,pid,False)
return h_process
def attach(self,pid):
self.h_process = self.open_process(pid)
if kernel32.DebugActiveProcess(pid):
self.debugger_active = True
self.pid = int(pid)
else:
print "[*] Unable to attach to the process."
def run(self):
while self.debugger_active == True:
self.get_debug_event()
def get_debug_event(self):
debug_event = DEBUG_EVENT()
continue_status= DBG_CONTINUE
if kernel32.WaitForDebugEvent(byref(debug_event),INFINITE):
raw_input("Press a key to continue...")
self.debugger_active = False
kernel32.ContinueDebugEvent(\
debug_event.dwProcessId, \
debug_event.dwThreadId, \
continue_status)
def detach(self):
if kernel32.DebugActiveProcessStop(self.pid):
print "[*] Finished debugging. Exiting..."
return True
else:
print "There was an error"
return False
재귀가 발생하는 연결 메소드에 코드를 붙여 넣지 않았으므로 도움이 될 수 없습니다. Pls 귀하의 Q를 편집하여 해당 코드를 표시하십시오. –