按序号调用DLL的函数
来源:互联网 发布:联想笔记本无网络访问 编辑:程序博客网 时间:2024/06/04 18:22
//示例:按序号调用DLL的函数
void CTestwDlg::OnButton1()
{
//1.动态加载DLL
HMODULE hlib = LoadLibrary("c:\\scan.dll");
if (!hlib)
{
MessageBox("LoadLib fail");
return;
}
//2.得到序号为1的函数地址
DWORD fxAddr = (DWORD)GetProcAddress(hlib, (LPCTSTR)1);
//3.分析函数原型 (通过OD/IDA分析压栈参数和调用约定)
/*
.text:00AE63D7 8B 4D 1C mov ecx, [ebp+arg_14]
.text:00AE63DA 8B 55 18 mov edx, [ebp+arg_10]
.text:00AE63DD 51 push ecx
.text:00AE63DE 52 push edx
.text:00AE63DF 8D 4D F8 lea ecx, [ebp+var_8]
.text:00AE63E2 51 push ecx
.text:00AE63E3 FF D0 call eax
.text:00AE63E5 EB 12 short loc_AE63F9
*/
//4.调用函数(三种方式)
int v1,v2,v3,v4, r1, r2, r3;
v1=v2=v3=v4=r1=r2=r3=0;
//M1
typedef int (__stdcall *PFX)(int *, int, unsigned int);
PFX pfx = (PFX)fxAddr;
r1 =pfx(&v2, v3, v4);
//M2
r2 = ((int (__stdcall *)(int *, int, unsigned int))pfx)(&v2, v3, v4);
DWORD r = 0;
//M3
__asm
{
PUSHAD
mov edx, v4
mov ecx, v3
push edx
push ecx
lea edx, v2
push edx
mov EAX, pfx;
call eax
MOV r3, eax;
POPAD
}
CString s;
s.Format("r1=%d,r2=%d,r3=%d", r1,r2,r3);
MessageBox(s, "Success");
return;
}
- 按序号调用DLL的函数
- 函数的DLL调用方式
- 按序号索引二叉树的应用
- 数据结构研究 ----单链表的按序号查找
- 链式表的按序号查找
- PTA- 链式表的按序号查找
- 如何调用未知接口的dll函数
- DLL导出函数的声明和调用
- DLL导出函数的声明和调用
- DLL函数调用的运行时错误
- java(JNA)调用dll函数的问题
- 如何编写可以调用的DLL函数
- JNA调用DLL函数遇到的几个问题
- 调用游戏dll里面的汇编函数
- C#调用USER32.DLL的API函数
- C函数的DLL,C++动态调用。
- 动态调用dll函数
- LoadLirary函数调用DLL
- 系统调用和c库之间的关系
- UMX-MTP协议网关
- oracle 定时执行存储过程
- java 通过 URL 类和 URLConnection类 以及输入流实现文件下载功能
- 与Windows Phone 7 相关的一些概念
- 按序号调用DLL的函数
- 系统统计
- 移动开发者大会第一日观感
- 标准的USB设备请求命令
- c++静态成员小结,c++,static
- Bada学习-(十七)使用多点触控
- iis 伪静态设置
- 仓央嘉措 诗选
- 关于TableLayout的注意点: