2010-03-18 3 views
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 
+1

재귀가 발생하는 연결 메소드에 코드를 붙여 넣지 않았으므로 도움이 될 수 없습니다. Pls 귀하의 Q를 편집하여 해당 코드를 표시하십시오. –

답변

1

I 어떤 시점에서, 이름을 attach에서 open_process로 바꾼 것으로 가정합니다 (traceback의 결과로 보입니다). 이 경우
는 오류가 여기에 있습니다 : 당신이 볼 수 있듯이, 그것은 자신을 재귀 적으로 호출

def open_process(self,pid): 
    h_process = self.open_process(pid) 

.
일부 복사물에 대해서는 & 붙여 넣기가 있기 때문에 안전하게 제거 할 수 있습니다.

관련 문제