Dream_668 2023-02-23 19:19 采纳率: 20%
浏览 76

如何用C++实现 向进程注入dll并传参(也就是程序和dll间通信) 或 不注入dll直接向进程调用汇编代码,求指导

如何用C++实现 向进程注入dll并传参(也就是程序和dll间通信) 或 不注入dll直接向进程调用汇编代码
注:我用的是VS2019,向x86,32-bit程序注入

  • 写回答

3条回答 默认 最新

  • MarkHan_ 2023-02-23 20:05
    关注

    向进程注入dll并传参的实现步骤如下:

    1. 创建dll文件,编写对应的代码,并将dll编译成x86,32-bit格式。
    2. 创建主程序,编写代码并将其编译成x86,32-bit格式。
    3. 在主程序中调用Windows API函数LoadLibrary,加载dll文件。
    4. 在主程序中调用Windows API函数GetProcAddress,获取dll中需要调用的函数的地址。
    5. 在主程序中调用dll中的函数,并传递参数。

    下面是一个示例代码:

    #include <windows.h>
    #include <iostream>
    
    using namespace std;
    
    typedef void(*DLL_FUNCTION)(int);
    
    int main()
    {
        // 加载dll
        HMODULE hDll = LoadLibrary("dllname.dll");
        if (hDll == NULL)
        {
            cout << "LoadLibrary failed" << endl;
            return -1;
        }
    
        // 获取dll中的函数地址
        DLL_FUNCTION pFunction = (DLL_FUNCTION)GetProcAddress(hDll, "functionname");
        if (pFunction == NULL)
        {
            cout << "GetProcAddress failed" << endl;
            return -1;
        }
    
        // 调用dll中的函数,并传递参数
        pFunction(123);
    
        // 释放dll
        FreeLibrary(hDll);
    
        return 0;
    }
    

    不注入dll直接向进程调用汇编代码的实现步骤如下:

    1. 创建主程序,编写代码并将其编译成x86,32-bit格式。
    2. 在主程序中将汇编代码作为字符串嵌入到代码中。
    3. 在主程序中将字符串中的汇编代码转换为二进制代码。
    4. 在主程序中分配一块内存,将二进制代码复制到该内存中。
    5. 在主程序中调用Windows API函数VirtualProtect,将内存设置为可执行状态。
    6. 在主程序中调用内存中的代码,并传递参数。
    7. 在主程序中调用Windows API函数VirtualFree,释放内存。
    评论

报告相同问题?

问题事件

  • 修改了问题 2月23日
  • 创建了问题 2月23日

悬赏问题

  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥15 关于超局变量获取查询的问题
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集
  • ¥15 在启动roslaunch时出现如下问题
  • ¥15 汇编语言实现加减法计算器的功能
  • ¥20 关于多单片机模块化的一些问题