首页
社区
课程
招聘
[原创]为无源码的DLL增加接口功能
2023-1-9 22:15 8816

[原创]为无源码的DLL增加接口功能

2023-1-9 22:15
8816



 

完整源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <thread>
#include <Windows.h>
#pragma warning(disable:4996)
 
using namespace std;
 
 
void __declspec(dllexport) CalculateFunc(int count)
{
    int index = 0;
    for (int i = 0; i < count; i++)
    {
        printf("i=%d, %d...\n", i, ++index);
        Sleep(1000);
    }
 
    printf("Threader Over...\n");
}
 
 
int  g_indexRef = 0;
void myThread(int count)
{
    __asm
    {
        push eax
        mov eax, esp
        sub eax, 0x10
        mov g_indexRef, eax
        push count
        call CalculateFunc
        add esp,4
        pop eax
    }
}
 
void CalculateFuncAsync()
{
    std::thread thread(myThread, 100);
    thread.join();//等待线程结束
}
 
 
int main()
{
    std::thread thread(CalculateFuncAsync);
    Sleep(3000);
    if (g_indexRef)
    {
        *((int*)g_indexRef) = 100;
        thread.join();
    }
    printf("Main Over...\n");
 
    return 0;
}

[培训]《安卓高级研修班(网课)》月薪三万计划

最后于 2023-1-9 22:26 被_THINCT编辑 ,原因:
收藏
点赞5
打赏
分享
最新回复 (4)
雪    币: 7857
活跃值: (5050)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
mudebug 2023-1-9 23:17
2
0
曲线救国了兄弟。我们都是一个hook走天下
雪    币: 3399
活跃值: (7685)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
_THINCT 2023-1-10 04:58
3
0
mudebug 曲线救国了兄弟。我们都是一个hook走天下


我确实也想过Hook,但现在这种方式是可以不用修改源DLL文件的一种相对较为温和的方式。

最后于 2023-1-10 08:45 被_THINCT编辑 ,原因:
雪    币: 1772
活跃值: (2703)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
拍拖 2 2023-1-13 15:28
4
0
如果目标DLL支持多线程安全调用,为什么不把任务分成多份,然后外面创建多个线程并发调用那个函数。每个线程每次计算一小份,会不会比你这个解决方案还容易点。
雪    币: 3399
活跃值: (7685)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
_THINCT 2023-1-13 16:01
5
0
拍拖 如果目标DLL支持多线程安全调用,为什么不把任务分成多份,然后外面创建多个线程并发调用那个函数。每个线程每次计算一小份,会不会比你这个解决方案还容易点。

嗯,其实这个我也想过。因为原接口是一个计算机器加工时间的功能。里面的因子有起点速度,加速度等一系列物理关系,比较难拆分。如果只是一个简单的线性关系,这个思路确实来得更好的。上面的接口实现只是一个简单的模拟,不是完全贴切。

最后于 2023-1-13 16:02 被_THINCT编辑 ,原因:
游客
登录 | 注册 方可回帖
返回