|
又抽风研究VB多线程技术了。
简单的说一下实现方法。
用数组存储 字节,来构造一个小型函数
函数里面调用VB类中的函数。
遇到了一个问题。
在IDE下完美执行多线程,但是生成出EXE 就不行了。不知道怎么回事。
求大家帮助!
附部分代码
- Option Explicit
- Private Declare Function CallWindowProcA Lib "user32.dll" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
- Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (ByRef Destination As Any, ByRef Source As Any, Optional ByVal Length As Long = 4)
- Private Declare Function CreateThread Lib "kernel32.dll" (ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Long, ByVal dwCreationFlags As Long, ByVal lpThreadId As Long) As Long
- 'Private Declare Function CreateThread Lib "kernel32.dll" (ByRef lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal dwStackSize As Long, ByRef lpStartAddress As Long, ByRef lpParameter As Any, ByVal dwCreationFlags As Long, ByRef lpThreadId As Long) As Long
- Private Declare Function TerminateThread Lib "kernel32.dll" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
- Private Type SECURITY_ATTRIBUTES
- nLength As Long
- lpSecurityDescriptor As Long
- bInheritHandle As Long
- End Type
- Private m_hThread As Long '线程句柄
- Private m_pObjMe As Long '本模块指针
- Private m_pThreadProc As Long '线程函数指针
- Private m_ShellCode() As Byte '自己构造一段小函数
- Private Const ThreadProcPos As Long = 3 '保存了线程过程的位置
- Private Function ThreadProc(ByVal lpParamer As Long) As Long
-
- MsgBox 2
- End Function
- Public Function Create() As Long
- CreateThread 0, 0, VarPtr(m_ShellCode(1)), 0, 0, 0
- 'CallWindowProcA VarPtr(m_ShellCode(1)), 0, 0, 0, 0
- End Function
- Private Sub Class_Initialize()
- '获取类模块指针
- m_pObjMe = ObjPtr(Me)
- RtlMoveMemory m_pThreadProc, ByVal m_pObjMe
- RtlMoveMemory m_pThreadProc, ByVal m_pThreadProc + 32
-
- ReDim m_ShellCode(1 To 32) As Byte
- m_ShellCode(1) = &H55 ' push ebp
- m_ShellCode(2) = &H8B ' mov ebx,esp
- m_ShellCode(3) = &HEC
- m_ShellCode(4) = &H83 ' add esp,-0x4
- m_ShellCode(5) = &HC4
- m_ShellCode(6) = &HFC
- m_ShellCode(7) = &H8D ' lea eax,[ebp-0x4]
- m_ShellCode(8) = &H45
- m_ShellCode(9) = &HFC
- m_ShellCode(10) = &H50 'push eax
- m_ShellCode(11) = &HFF 'push [ebp+0x8]
- m_ShellCode(12) = &H75
- m_ShellCode(13) = &H8
-
- m_ShellCode(14) = &H68 'push m_pObjMe
- m_ShellCode(15) = &H0
- m_ShellCode(16) = &H0
- m_ShellCode(17) = &H0
- m_ShellCode(18) = &H0
- m_ShellCode(19) = &HB8 'mov eax,m_pThreadProc
- m_ShellCode(20) = &H0
- m_ShellCode(21) = &H0
- m_ShellCode(22) = &H0
- m_ShellCode(23) = &H0
- m_ShellCode(24) = &HFF 'call eax
- m_ShellCode(25) = &HD0
- m_ShellCode(26) = &H8B 'mov eax,[ebp-0x4]
- m_ShellCode(27) = &H45
- m_ShellCode(28) = &HFC
- m_ShellCode(29) = &HC9 'leave
- m_ShellCode(30) = &HC2 'retn 0x4
- m_ShellCode(31) = &H4
- m_ShellCode(32) = &H0
-
- RtlMoveMemory ByVal VarPtr(m_ShellCode(15)), m_pObjMe
- RtlMoveMemory ByVal VarPtr(m_ShellCode(20)), m_pThreadProc
-
- End Sub
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖被以下淘专辑推荐:
- · 底层教程|主题: 97, 订阅: 3
- · 底层测试|主题: 135, 订阅: 0
|