首页
社区
课程
招聘
PBwin编译dll出错 求帮助
发表于: 2014-8-19 04:02 3696

PBwin编译dll出错 求帮助

2014-8-19 04:02
3696
刚上手PB练习写DLL (代码原装 我没动)遇到了编译错误【invalid thread function 】无效的线程函数。 百度了半宿也没能找到解决原因。求大大指教。
代码:
#COMPILE DLL  '表示编译成DLL文件
#DIM ALL
#INCLUDE "Win32API.inc"      '在C:/PBWin80/WinAPI目录下的文件,这是  Win32API函数库,只要这样用了大部分的API都可以直接用了
Global ghInstance As DWORD
Global hThread As DWORD

Function IsFileRun(ByVal pFile As String) As Long
    Dim hFile As Long
    hFile = CreateFile(BYVAL STRPTR(pFile), %GENERIC_READ OR %GENERIC_WRITE, 0&, BYVAL %NULL, %OPEN_EXISTING, %FILE_ATTRIBUTE_NORMAL, 0&)
    IsFileRun = hFile
    CloseHandle hFile
End Function
'这是打开和创建文件等等的API函数
'如执行成功,则返回文件句柄,如果失败就返回INVALID_HANDLE_VALUE 即-1,这跟下面的判断是符合的。
'CreateFile这个API函数详细信息BAIDU一下就清楚了。
'大概原理是:看看指定路径的文件可不可直接改写,如果可以就表示文件没运行,如果不可,就表示它在运行了。当然这只是一种方法。
Function LIBMAIN(ByVal hInstance As Long, ByVal fwdReason As Long, ByVal lpvReserved As Long) As Long   '这是DLL的入口函数LIBMAIN
                                                                                                        '  这
    Select Case fwdReason                                                                               '  一
    CASE %DLL_PROCESS_ATTACH                                                                            '  大
                                                                                                        '  块
        ghInstance = hInstance                                                                          '  是
        THREAD CREATE ThreadProc1(%NULL) TO hThread     'DLL载入时建立一个线程 ThreadProc1              '  用
        FUNCTION = 1                                                                                    '  来
                                                                                                        '  控
    CASE %DLL_PROCESS_DETACH  '进程被停止                                                               '  制
                                                                                                        '  线
        TerminateThread hThread, %NULL                  'DLL卸载时结束线程 ,这里我们不需要去动它。     '  程
        FUNCTION = 1                                                                                   '  的
                                                                                                        '
    CASE %DLL_THREAD_ATTACH       '线程被调用                                                           '
                                                                                                        '
        FUNCTION = 1                                                                                    '
                                                                                                        '
    CASE %DLL_THREAD_DETACH         '线程被停止                                                         '
                                                                                                        '
        FUNCTION = 1                                                                                    '
                                                                                                        '
    End Select                                                                                          '
End Function                                                                                            '

Function ThreadProc1(ByVal x As DWORD) As Long '这是被创建的线程,我们的目的是用来检测进程
    DO WHILE (%TRUE)'死循环,不怕,在注入DLL里不会影响CPU多少
        If IsFileRun("e:/desktop/procmon.exe") <> -1 Then '检测e:/desktop/procmon.exe有没有运行,这就是您要保护的进程路径了。   invalid thread function

            FUNCTION = SHELL("e:/desktop/procmon.exe")'如果没有运行就运行它。
        End If
        SLEEP (300)    '暂停1秒
    Loop
End Function

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 34
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好像好大气的样子吖。
2014-8-19 08:48
0
雪    币: 53
活跃值: (528)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Function ThreadProc1(ByVal x As DWORD) As Long

改为
Thread Function ThreadProc1(ByVal x As DWORD) As Long
2014-8-19 14:10
0
游客
登录 | 注册 方可回帖
返回
//