Probleme beim Beispielcode

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cn.
User
Beiträge: 2
Registriert: Mittwoch 30. Juni 2010, 21:16

Hi liebe Community,
ich habe vor in die Welt von Python einzutauchen, doch bin sehr früh auf den Boden gekommen...
Bin einigermaßen mit Java und C# vertraut und habe mir das Buch Gray Hat Python zugelegt, da es mich schon immer in Richtung Programmanalyse/Reverse Engineering gezogen hat(the matrix has you neo *g*).

Bevor ich auf mein Problem eingehe beschreibe ich allerdings meine Entwicklungsumgebung einwenig. Vielleicht ist ja da der Wurm drin x)
Habe mir Eclipse(Version 3.5.2) mit PyDev(Version 1.5.9) und Python(Version 2.5) angeschafft.

Nun bin ich beim Entwerfen eines eigenen Debuggers angekommen, aber habe einige Probleme mit dem im Buch angegebenen Beispielcode:
my_debugger_defines.py

Code: Alles auswählen

from ctypes import *

# Microsoft Typen auf ctypes abbilden

WORD = c_ushort
DWORD = c_ulong
LPBYTE = POINTER(c_ubyte)
LPTSTR = POINTER(c_char)
HANDLE = c_void_p

# Konstanten

DEBUG_PROCES = 0x00000001
CREATE_NEW_CONSOLE = 0x00000001

# Strukturen->CreateProcessA()
class STARTUPINFO(Structure):
    _fields_ = [
                 ("cb", DWORD),
                 ("lpReserved", LPTSTR),
                 ("lpDesktop", LPTSTR),
                 ("lpTitle", LPTSTR),
                 ("dwX",DWORD),
                 ("dwY", DWORD),
                 ("dwXSize", DWORD),
                 ("dwYSize", DWORD),
                 ("dwXCountChars", DWORD),
                 ("dwYCountChars", DWORD),
                 ("dwFillAttribute", DWORD),
                 ("dwFlags", DWORD),
                 ("wShowWindow", WORD),
                 ("cbReserved2", WORD),
                 ("lpReserved2", LPBYTE),
                 ("hStdInput", HANDLE),
                 ("hStdOutput", HANDLE),
                 ("hStdError", HANDLE),
                 ]
   
class PROCESS_INFORMATION(Structure):
    _fields_= [
                  ("hProcess", HANDLE),
                  ("hThread", HANDLE),
                  ("dwProcessId", DWORD),
                  ("dwThreadId", DWORD),
                  ]
my_debugger.py

Code: Alles auswählen

from ctypes import *
from my_debugger_defines import *

kernel32 = windll.kernel32

class debuger():
    def _init_(self):
        pass
    
    def load(self,path_to_exe):
        
        #dwCreation-Flag bestimmt, wie der Prozess zu erzeugen ist
        #creation_flags = CREATE_NEW_CONSOLE setzen
        creation_flags = DEBUG_PROCESS
        
        #Strukturen instanziieren
        startupinfo = STARTUPINFO()
        process_information = PROCESS_INFORMATION()
        
        #nun den gestarteten Prozess in einem seperaten Fenster darstellen
        startupinfo.dwFlags = 0x1
        startupinfo.wShowWindow = 0x0
        
        #initialisieren der cb-Variablen der STARTUPINFO Structure
        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
            
        else:
            print "[*] Error: 0x%08x." % kernel32.GetLastError()
my_test.py

Code: Alles auswählen

import my_debugger

debugger = my_debugger.debugger()

debugger.load("C:\\WINDOWS\\system32\\calc.exe")
In Zeile 14 von my_debugger.py ("creation_flags = DEBUG_PROCESS") bekomme ich die Fehlermeldung "Undefined variable: DEBUG_PROCESS".
Das Gleiche Problem tritt nochmal in Zeile 18 auf ("process_information = PROCESS_INFORMATION()").

Und ja ihr könnt es sicher schon denken... nochmal das Problem in der my_test.py:
In Zeile 3 "Undefined variable from import: debugger".

Schon ewig viel gegoogled/gelesen/rumgebastelt, aber nichts wirklich hilfreiches gefunden.
Zum Glück gibt es ja noch viele andere in Python Mächtige die mich hoffentlich ein wenig zurecht weisen können :D

MfG cn.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also ich sehe in dem Code einen Typo, in my_debugger fehlt der Klasse debugger ein "g".

In Python 2.x sollten Klassen von "object" erben.

*-importe sind auch verpönt und sollten vermieden werden.

Und generell sieht PEP8 vor, Klassen in CamelCase zu schreiben.

Und hier im Board gibts spezielle Python-Code-Tags; da hat man zusätzlich zur erhaltenen Einrückungsstruktur ein hübsches Syntax-Highlighting :-)

Ach ja, und herzlich willkommen im Forum :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@cn.: `DEBUG_PROCESS` gibt es in der `my_debugger_defines.py` tatsächlich nicht.

Du solltest übrigens immer dazu sagen woher die Fehlermeldungen kommen. Der zweite muss ja wohl von Eclipse/PyDev und nicht von Python kommen, denn beim `NameError` bezüglich `DEBUG_PROCES` wäre der Programmlauf ja abgebrochen worden.

Und Du musst Dir im klaren sein, dass Eclipse/PyDev auch manchmal falsche Fehler meldet, weil so eine dynamische Sprache nicht immer statisch komplett erfasst werden kann.
cn.
User
Beiträge: 2
Registriert: Mittwoch 30. Juni 2010, 21:16

Hui, das ging schnell... Vielen Dank für eure Antworten (=.
Ich werd mich dann mal dransetzen und versuchen all die Dinge auszumerzen.
Meint ihr ich soll mir ne andere IDE zulegen?
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

cn. hat geschrieben:Hui, das ging schnell... Vielen Dank für eure Antworten (=.
Ich werd mich dann mal dransetzen und versuchen all die Dinge auszumerzen.
Meint ihr ich soll mir ne andere IDE zulegen?
Nope, das angesprochene Problem ist nicht direkt auf PyDev zurückzuführen, das machen andere IDEs auch nicht besser ;)
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

ms4py hat geschrieben:Nope, das angesprochene Problem ist nicht direkt auf PyDev zurückzuführen, das machen andere IDEs auch nicht besser ;)
Richtig, man sollte vielleicht noch erwähnen, dass man keine IDE für Python benoetigt. Wenn man das trotzdem tut, sollte man alle Meldungen aber eben "with a grain of salt" nehmen und ggf in der Shell testen.
Antworten