[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理如何加载一个DLL使其运行

DLL是带有入口点的。 如何汇编修改或者某种方法使其运行。

最好是批处理就可以实现的。

救助中!

TOP

我觉得这需要第三方软件实现了。

TOP

批处理真是无所不能。

TOP

回复 2# xinje


    我见过别人实现过。可惜的是我把那个代码给删了。 现在想找却找不到了。 真是存起来不可惜。删掉才可惜啊. 希望哪位大神再能写一个

TOP

[特效代码] 高手来看看rundll32如何加载DLL

RUNDLL32如何工作  
RUNDLL32按以下步骤工作:  
1、分析命令行   
2、用LoadLibrary()这个API来装载DLL   
3、用GetProcAddress()这个API来找到函数入口点   
4、调用函数,把<可选参数>做为命令行传递给函数

批处理如何示例加载一个DLL

TOP

不是的
rundll32 调用的函数入口必须有如下的形式:

  1. void CALLBACK <entrypoint>(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine,int nCmdShow)
复制代码



所以他不能调用大多数的API

TOP

回复 5# forfiles


    不是第三方工具。而是一个批处理代码

TOP

纯批处理代码实现调用所有的DLL入口的不太可能

估计楼主之前丢失的代码用了rundll32。
但是rundll32也不是万能的

TOP

从rundll32的工作原理可以知道,rundll32可以调用几乎所有导出函数!
rundll32能不能调用函数,和函数能不能正常工作,是两个不同的概念。
譬如你可以任意喊你同学的名字,但你同学听到后是否屌你,已经不是你能左右的。

rundll32最后会以如下参数调用函数:
func  hwnd, hinst, lpszCmdLine, nCmdShow
但被调用的函数func要不要这些参数及如何处理这些参数才是关键。
比如下面这个函数随便怎么搞都能运行(虽然形参是整形和指针,但你输入任何类型的参数都没问题):
int foo(int i, void *p)
{
    char buf[1024] = "";
    sprintf(buf, "0x%08X 0x%08X", i, p);
    return MessageBoxA(0, buf, "IUnknown", 0);
}

gcc -shared -fPIC -o test.dll test.c

rundll32.exe test.dll,foo ***
1

评分人数

我不知道

TOP

返回列表