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

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

2023-1-9 22:15
10622


完整源代码:

 
#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;
}
#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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2023-1-9 22:26 被_THINCT编辑 ,原因:
收藏
免费 6
支持
分享
最新回复 (4)
雪    币: 9099
活跃值: (6305)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
曲线救国了兄弟。我们都是一个hook走天下
2023-1-9 23:17
0
雪    币: 4361
活跃值: (8715)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
mudebug 曲线救国了兄弟。我们都是一个hook走天下


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

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

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

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