标题: [特效代码] 高手来看看rundll32如何加载DLL [打印本页]
作者: 情不自禁 时间: 2012-8-31 20:59 标题: 批处理如何加载一个DLL使其运行
DLL是带有入口点的。 如何汇编修改或者某种方法使其运行。
最好是批处理就可以实现的。
救助中!
作者: xinje 时间: 2012-8-31 21:13
我觉得这需要第三方软件实现了。
作者: Demon 时间: 2012-8-31 21:14
批处理真是无所不能。
作者: 情不自禁 时间: 2012-8-31 21:21
回复 2# xinje
我见过别人实现过。可惜的是我把那个代码给删了。 现在想找却找不到了。 真是存起来不可惜。删掉才可惜啊. 希望哪位大神再能写一个
作者: 情不自禁 时间: 2012-8-31 23:56 标题: 高手来看看rundll32如何加载DLL
RUNDLL32如何工作
RUNDLL32按以下步骤工作:
1、分析命令行
2、用LoadLibrary()这个API来装载DLL
3、用GetProcAddress()这个API来找到函数入口点
4、调用函数,把<可选参数>做为命令行传递给函数
批处理如何示例加载一个DLL
作者: forfiles 时间: 2012-9-1 12:13
http://www.bathome.net/thread-4349-1-1.html
http://www.bathome.net/thread-10173-1-1.html
作者: garyng 时间: 2012-9-1 15:16
不是的
rundll32 调用的函数入口必须有如下的形式:
- void CALLBACK <entrypoint>(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine,int nCmdShow)
复制代码
所以他不能调用大多数的API
作者: 情不自禁 时间: 2012-9-1 21:05
回复 5# forfiles
不是第三方工具。而是一个批处理代码
作者: garyng 时间: 2012-9-2 01:16
纯批处理代码实现调用所有的DLL入口的不太可能
估计楼主之前丢失的代码用了rundll32。
但是rundll32也不是万能的
作者: IUnknown 时间: 2012-9-2 11:21
从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 ***
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |