`
in355hz
  • 浏览: 230309 次
社区版块
存档分类
最新评论

实现 Rundll.exe 功能的简单代码

阅读更多

实现 Rundll.exe 的功能,代码很简单:

 

#include "stdafx.h"

#include <tchar.h>
#include <windows.h>
#include <iostream.h>

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    HMODULE hModule;
    LPVOID lpvfn;

    if (argc < 3) 
    {
        cout << "Not enough parameters passed." << endl;
        return -1;
    }

    hModule = ::LoadLibrary(argv[1]);
    if (hModule == NULL)
    {
        cout << "Load DLL \"" << argv[1] << "\" failed!" << endl;
        return (int)GetLastError();
    }

    lpvfn = ::GetProcAddress(hModule, argv[2]);
    if (lpvfn == NULL)
    {
        cout << "Can't found specific function \"" << argv[2] << "\"!" << endl;
        return (int)GetLastError();
    }

    int iRetCode;

    int arg = argc - 1;
    TCHAR* szArg;

    __asm push esp  // save current 'esp'

    while (arg > 2)
    {
        szArg = argv[arg];

        bool bstring = false;
        while(*szArg != _T('\0'))
        {
            if (!_istdigit(*szArg))
            {
                bstring = true;
                break;
            }
            szArg ++;
        }

        if (bstring)
        {
            szArg = argv[arg];
            __asm push szArg
        }
        else
        {
            long argl = _ttol(argv[arg]);
            __asm push argl
        }

        arg --;
    }

    __asm call lpvfn
    __asm pop  esp
    __asm mov  iRetCode, eax

    ::FreeLibrary(hModule);
    return iRetCode;
}

  

 

只支持 LONG 和 String 两种参数而且 String 中间不能有空格(不然会被认为是两个参数),如果要写的好一点应该自己判断参数类型及转换参数。


我测试的参数如下:

 

test.exe user32.dll MessageBoxA 0 This'sOK Caption 0

 

相当于调用:MessageBoxA(NULL, "This'sOK", "Caption", MB_OK);

分享到:
评论

相关推荐

    Rundll32.exe是什么?.docx

    例如,它可以方便地启动某些系统功能,如重启计算机,只需一行简单的命令`Shell "rundll32.exe user.exe,restartwindows"`即可完成,无需编写复杂的VB代码。 总的来说,理解Rundll32.exe的工作原理和它在系统中的...

    rundll简介.doc

    以上命令行调用是Windows系统中实现特定功能的快捷方式,它们使得用户或程序员可以通过简单的命令行参数来访问系统功能,而无需编写复杂的代码或通过图形用户界面操作。这对于自动化任务、脚本编写以及系统维护来说...

    a63822322的RUNDLL32内容的说明

    下面列举了一些RUNDLL32.EXE的常见应用场景示例,这些示例展示了如何通过RUNDLL32.EXE来调用不同的DLL函数来实现特定的功能: 1. **控制面板项目** - `rundll32.exeshell32.dll, Control_RunDLL access.cpl,,1`:...

    转36招搞定电脑一切难题.doc

    在编程中,尤其是VB(Visual Basic)中,可以结合RUNDLL32.EXE和Shell指令,使得程序执行一些通常需要API声明的功能变得更简单。例如,传统上要在VB中实现重启计算机,需要定义WinAPI,而现在仅需一行命令: `Shell ...

    Windows rundll32接口规范

    `rundll32`提供了一种简单的方式,使得不直接启动可执行文件的情况下,能够运行DLL中的特定功能。这个接口规范在Windows系统中扮演着重要的角色,尤其对于应用程序开发人员来说,理解和掌握它的使用方法至关重要。 ...

    vb写的关机程序,调用Rundll32.dll

    标题中的“vb写的关机程序,调用Rundll32.dll”指的是使用Visual Basic (VB)编程语言编写的程序,该程序利用Windows系统内置的Rundll32动态链接库来实现计算机的关机功能。Rundll32是一个实用工具,允许你通过DLL...

    Windows下的EXE文件大揭密

    39. **RunDll32.exe**:动态链接库(DLL)启动程序,用于启动DLL中的线程。 40. **ScandSkw.exe**:磁盘扫描工具,用于检查并修复文件系统错误。 41. **SmartDrv.exe**:智能驱动程序,用于提高DOS程序的性能。 42. ...

    使用调用外部程序函数实现API函数高级功能...

    这段代码通过调用`rundll.exe`来触发`user.exe`中的`exitwindowsexec`函数,从而实现重启操作。需要注意的是,`vbHide`参数用于隐藏命令行窗口,使操作更加流畅。 ##### 2. 打开文件或目录 除了重启系统之外,我们...

    C#启动电话拨号程序

    在Windows系统中,拨号通常通过调用操作系统的内置拨号程序`rundll32.exe`来实现。 1. **使用`rundll32.exe`启动拨号程序** - `rundll32.exe`是一个Windows核心组件,可以加载并执行DLL(动态链接库)中的函数。 ...

    pb调用qq截图dll

    1. `run('rundll32 CameraDll.dll,CameraSubArea')` 这是一种使用系统命令`rundll32.exe`来执行DLL中的特定函数的方式。`CameraDll.dll`是DLL文件名,`CameraSubArea`是DLL中提供的函数名,该函数负责执行截图操作。...

    Shell语句用法心得...

    例如,在代码示例中,通过先创建一个临时`.lnk`文件,再调用`Rundll32.exe`和`AppWiz.Cpl`组件来创建新的链接,实现自动化创建快捷方式的功能。 2. **系统控制面板访问:** 可以利用`Shell`函数直接打开控制面板的...

    PB调用DLL.docx

    在AddComService类中实现接口方法,例如这里是一个简单的加法方法`iadd(int a, int b)`。 6. 注册COM组件: 注册DLL有多种方法,这里列举两种: - 使用RegAsm命令行工具,位于.NET Framework安装目录下,如`C:\...

    Windows下exe详解

    `rundll32.exe` - **功能**:加载并执行DLL文件中的函数。 - **使用场景**:执行动态链接库中的代码。 ##### 40. `scandskw.exe` - **功能**:磁盘扫描工具。 - **使用场景**:修复文件系统错误。 ##### 41. `...

    BAT批处理脚本-文件相关操作-注销DLL文件.zip

    在这个文件中,通常会包含一条或者多条命令,用于调用系统的`rundll32.exe`工具来执行DLL的注销操作。`rundll32.exe`是一个系统级别的实用程序,它可以用来加载和执行DLL文件中的函数。注销DLL的操作通常涉及到`...

    精彩编程与编程技巧-如何启动拨号网路中的连线?...

    在这段代码中,首先通过`Shell`函数调用`rundll32.exe`启动拨号网络连接“Hinet”,然后通过`SendKeys`函数模拟按下回车键来确认拨号操作。需要注意的是,在实际使用时,可能还需要处理错误情况和其他细节问题。 ##...

    易语言启动系统功能对话框

    这段代码启动了一个系统控制面板,通过`rundll32.exe`这个工具调用了`shell32.dll`中的`Control_RunDLL`函数,打开了`control.exe`,即控制面板程序。 除了`WinExec`,易语言还提供了其他API函数来实现系统功能...

    一 键 待 机 快 捷 方 式

    `rundll32.exe`是Windows操作系统中的一个重要组件,主要功能是运行动态链接库(DLL)文件中的函数。当执行`rundll32.exe powrprof.dll,SetSuspendState`时,系统会加载`powrprof.dll`并执行其中的`SetSuspendState`...

    qt-opensource-windows-x86-5.14.2

    7. **示例和测试**: 提供的样例代码可以帮助开发者快速理解如何使用Qt库来实现各种功能。 在开发Qt应用时,开发者可以使用Qt Designer来可视化地设计GUI界面,然后通过Qt的MOC(Meta-Object Compiler)处理UI文件...

    精彩编程与编程技巧-调用“添加打印机”对话框...

    这段代码的主要作用是启动`rundll32.exe`,并指定其运行`shell32.dll`中的`SHHelpShortcuts_RunDLLAddPrinter`函数,从而弹出“添加打印机”对话框。 #### 3.2 进一步扩展 为了更好地理解上述代码的作用,可以...

    精彩编程与编程技巧-在程序中打开 Internet 拨号连接窗口...

    在本例中,通过调用`rundll32.exe`并传入`naui.dll`和`RnaDial`函数名,实现了启动拨号网络连接的功能。 #### 2.2 `naui.dll`与`RnaDial`函数 `naui.dll`是Windows操作系统的一部分,其中包含了拨号网络用户界面的...

Global site tag (gtag.js) - Google Analytics