- 论坛徽章:
- 0
|
my_debugger_defines.py- #coding=utf-8
- '''
- Created on 2011-6-5
- @author: L-K
- '''
- from ctypes import *
- # 为ctypes变量创建符合匈牙利命名风格的匿名,这样可以使代码更接近Win32风格
- WORD = c_ushort
- DWORD = POINTER(c_ubyte)
- LPBYTE = POINTER(c_char)
- HANDLE = c_void_p
- # 常值定义
- DEBUG_PROCESS = 0x00000001
- CREATE_NEW_CONSOLE = 0x00000010
- # 定义函数CreateProcessA()所需结构体
- # CreateProcessA()函数介绍在P25
- class STARTUPINFO(Structure):
- _fields_ = [
- ("cb", DWORD), # 结构体本身的大小
- ("lpReserved", LPBYTE),
- ("lpDesktop", LPBYTE),
- ("lpTitle", LPBYTE),
- ("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:- #coding=utf-8
- '''
- Created on 2011-6-5
- @author: L-K
- '''
- from ctypes import *
- from my_debugger_defines import *
- kernel32 = windll.kernel32
- class debugger():
- def __init__(self):
- pass
-
- def load(self, path_to_exe):
- # 参数dwCreationFlags种的标志位控制着进程的创建方式。你若希望新创建的进程独占一个新的控制台窗口,而不是与父进程共用一个控制台,你可以加上标志位CREATE_NEW_CONSOLE
- creation_flags = DEBUG_PROCESS
-
- # 实例化之前的结构体
- startupinfo = STARTUPINFO()
- process_information = PROCESS_INFORMATION()
-
- # 在以下两个成员变量的共同作用下,新建进程将在一个单独的窗体中被显示,你可以通过改变结构体STARTUPINFO中各成员变量的值来控制debugg进程的行为
- startupinfo.dwFlags = 0x1
- startupinfo.wShowWindow = 0x0
-
- # 设置结构体STARTUPINFO中的成员变量cb的值,用以表示结构体本身的大小
- startupinfo.cb = sizeof(startupinfo)
-
- if kernel32.CreateProcessA(path_to_exe, 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:- #coding=utf-8
- '''
- Created on 2011-6-5
- @author: L-K
- '''
- import my_debugger
- debugger = my_debugger.debugger()
- debugger.load("C:\\WINDOWS\\system32\\calc.exe")
复制代码 这是个简单的调试器的初步,就是通过CreatProcess函数执行一个程序作为调试器进程的子进程,打印出子进程的PID然后就退出。
执行后出现错误:- Traceback (most recent call last):
- File "C:\Users\lucifer\eclipse\GrayHatPython\src\my_test.py", line 11, in <module>
- debugger.load("C:\\WINDOWS\\system32\\calc.exe")
- File "C:\Users\lucifer\eclipse\GrayHatPython\src\my_debugger.py", line 28, in load
- startupinfo.dwFlags = 0x1
- TypeError: expected LP_c_ubyte instance, got int
复制代码 求解,哪里错了。
刚接触python不久,不了解。
请问这个东西是这个函数特有的还是这个模块特有的,在Python参考手册能查到不?我暂时没查到。 |
|