首页
社区
课程
招聘
未解决 [求助]CreateThread函数报错
发表于: 2019-7-24 23:38 5840

未解决 [求助]CreateThread函数报错

2019-7-24 23:38
5840
#include "pch.h"
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
#define DllFunction extern "C" __declspec(dllexport)

......

DllFunction DWORD __stdcall WINAPI inject(LPVOID);

......

DWORD WINAPI inject() {
    ......
    return TRUE;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call) {
    case DLL_PROCESS_ATTACH: {
        ::DisableThreadLibraryCalls(hModule);
        CreateThread(NULL, 0, inject, NULL, 0, NULL);
    }
                             break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;

    default:;
    }
    return TRUE;
}

大佬们,为何这样写在链接的时候inject函数的名字还是_inject@4,vs2019报错说createthread中这是无法解析的外部符号,但是我前面已经加上了extern "C"了,请问这是为什么?


[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 9471
活跃值: (3164)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
你到底是要创建线程还是导出函数?
2019-7-24 23:59
1
雪    币: 9626
活跃值: (1826)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
3
多百度 啥都好使
2019-7-25 00:04
1
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
建议看看 MSDN 关于 CreateThread的参数说明,你就知道原因了。
另外,代码质量有待提高
2019-7-25 01:44
1
雪    币: 1258
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
myangel 建议看看 MSDN 关于 CreateThread的参数说明,你就知道原因了。 另外,代码质量有待提高
谢谢,本人新手,请见谅,代码质量确实有待提高
2019-7-25 09:31
1
雪    币: 1258
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
千音丶 你到底是要创建线程还是导出函数?
我这个逻辑确实有点混乱,感谢指点
2019-7-25 09:31
1
雪    币: 2056
活跃值: (1471)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
函数 写错了
上面定义部分定义的是   DllFunction DWORD __stdcall WINAPI inject(LPVOID);
但是你下面 实现部分却是 DWORD WINAPI inject() 相当于是重载了、
CreateThread的时候 他找不到 有一个参数的   inject(LPVOID)   这个函数所以......他只能给你报错。

2019-7-25 10:05
1
雪    币: 1258
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
youxiaxy 函数 写错了 上面定义部分定义的是 DllFunction DWORD __stdcall WINAPI inject(LPVOID); 但是你下面 实现部分却是 DWORD WINAPI i ...
谢谢,刚发现是这个错误,已改正,十分感谢
2019-7-25 12:30
1
雪    币: 7068
活跃值: (3517)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
9
不要再DllMain里创建线程。
2019-7-25 14:41
1
雪    币: 9626
活跃值: (1826)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
10
bxc 不要再DllMain里创建线程。
没有不能的说法,就连系统有些dll都会在dllmain里创建线程。
2019-7-25 19:06
1
雪    币: 7068
活跃值: (3517)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
11
不是不能,是不建议,详见微软的文章:
最后于 2019-7-26 14:28 被bxc编辑 ,原因:
2019-7-26 14:27
1
雪    币: 7068
活跃值: (3517)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
12
Sprite雪碧 没有不能的说法,就连系统有些dll都会在dllmain里创建线程。
不是不能,是不建议,详见微软的文章:
https://docs.microsoft.com/zh-cn/windows/win32/dlls/dynamic-link-library-best-practices


You should never perform the following tasks from withinDllMain:
......

Call CreateThread. Creating a thread can work if you do not synchronize with other threads, but it is risky.

......
最后于 2019-7-26 14:32 被bxc编辑 ,原因:
2019-7-26 14:31
1
雪    币: 429
活跃值: (388)
能力值: ( LV6,RANK:81 )
在线值:
发帖
回帖
粉丝
13
DllMain CreateThread,是不能,非常不安全,容易造成死锁。之前有个文章一直追到内核,从那之后再也不敢这样做了
2019-7-26 16:39
1
雪    币: 9626
活跃值: (1826)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
14
mlgbwoai DllMain CreateThread,是不能,非常不安全,容易造成死锁。之前有个文章一直追到内核,从那之后再也不敢这样做了
但是在DllMain中调用某些Api会出现问题,具体是卡死还是崩溃忘记了。必须要CreateThread才能执行。
2019-7-26 19:02
1
雪    币: 1416
活跃值: (4398)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
mlgbwoai DllMain CreateThread,是不能,非常不安全,容易造成死锁。之前有个文章一直追到内核,从那之后再也不敢这样做了
不能创建线程那我们写的dll意义何在?
2023-3-26 14:29
0
游客
登录 | 注册 方可回帖
返回
//