MalC0de wrote:
Hello there, I'm writting a debugger,
the problem is there no good interpretation ...

here's the codes:

my_debugger.py :

#!/usr/bin/env python
from ctypes import *
from my_debugger_defines import *
kernel32 = windll.kernel32
class debugger():
    def __init__(self):
          self.h_process = None
          self.pid = None
          self.debugger_active = False
          pass
    def load(self,path_to_exe):
        creation_flags = DEBUG_PROCESS
        startupinfo = STARTUPINFO()
        process_information = PROCESSINFORMATION()
        startupinfo.dwFlags = 0x1
        startupinfo.wShowWindow = 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 sucessfully 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 = kernel32.OpenProcess(PROCESS_ALL_ACCESS,pid,False)
    return h_process
def attach(self,pid):
        self.h_process = self.open_process(pid)
        # We attempt to attach to the process
        # if this fails we exit the call
        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.dwProdcessid,debug_event.dwThreadId,continue_status)
    def detach(self):
        if kernel32.DeugActiveProcessStop(self.pid):
            print "[*]Finished debugging. exiting ..."
            return True
        else:
            print "there was an error"
            return false

it's already have a method named : Attach ...
<snip>
Indentation is critical. You have defined functions ( Open_process() attach(), run(), etc. ) that have formal parameters named self, but are indented outside of the class definition. Indentation trumps, so these are not attributes of the class. They're functions, not methods.

It looks like you have other indentation problems, but I'll let you run with this much.

Incidentally, following naming conventions could also help here. debugger is a class, but it's not capitalized. Open_process() is intended to be a method, but it is capitalized. And your comments refer to attach() as Attach... Another convention you're breaking is using "from ctypes import * " That's a dangerous way to do imports, as it mixes those names with the ones in this module. I prefer a simple import, and use the module name as a prefix when you reference those symbols. If there are a few symbols you do want to have directly included, then import them one at a time, without the * notation. (just my opinion)

DaveA

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to