|
10精币
易语言代码转C代码,运行报错,求助
易语言代码:
|
WxModule_Init | 逻辑型 | | |
dllPath | 文本型 | | | | 调试输出 (dllPath )hModule = LoadLibraryA (dllPath )返回 (hModule > 0 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 结果 | 整数型 | | | i | 整数型 | | | szVersion | 文本型 | | | 返回 (_Call (hModule + 十六进制 (“B5A0”)) )|
_Call | 整数型 | | |
子程序地址 | 整数型 | | | | 参数1 | 整数型 | | | | 参数2 | 整数型 | | | | 参数3 | 整数型 | | | | 参数4 | 整数型 | | | | 参数5 | 整数型 | | | | 参数6 | 整数型 | | | | 参数7 | 整数型 | | | | 参数8 | 整数型 | | | | 参数9 | 整数型 | | | | 参数10 | 整数型 | | | | 参数11 | 整数型 | | | | 参数12 | 整数型 | | | | 参数13 | 整数型 | | | | 参数14 | 整数型 | | | | 参数15 | 整数型 | | | | 置入代码 ({ 86, 190, 15, 0, 0, 0, 141, 77, 8, 141, 76, 241, 252, 139, 65, 4, 133, 192, 116, 2, 255, 49, 78, 131, 233, 8, 133, 246, 117, 239, 255, 85, 8, 94, 201, 194, 124, 0 })返回 (0 )
C语言代码:
[C++] 纯文本查看 复制代码 enum Offset {
OPEN_INIT = 0xB5A0
};
int CallAsm(DWORD offset, DWORD p1) {
__asm {
push esi
mov esi, 0000000Fh
lea ecx, dword ptr [ebp+08h]
lea ecx, dword ptr [ecx+esi*8-04h]
Label2:
mov eax, dword ptr [ecx+04h]
test eax, eax
je Label1
push dword ptr [ecx]
Label1:
dec esi
sub ecx, 08h
test esi, esi
jne Label2
call dword ptr [ebp+08h]
pop esi
leave
retn 007Ch
};
return 0;
}
int WxInjectInit(char *dllName) {
char currentDir[256];
if (GetCurrentDirectoryA(MAX_PATH, currentDir) == 0) {
printf("获取当前目录失败");
return FALSE;
}
char dllPath[256];
snprintf(dllPath, 256, "%s\\%s", currentDir, dllName);
HMODULE hModule = LoadLibraryA(dllPath);
if (hModule == NULL) {
printf("加载动态库错误:%lu", GetLastError());
return FALSE;
}
DWORD moduleAddress = (DWORD) hModule + (DWORD) OPEN_INIT;
int ok = CallAsm(moduleAddress, 0);
return 0;
}
|
最佳答案
查看完整内容
// 定义函数指针--假设函数为---加法函数
typedef int (*call_func)(int,int);
//需要知道函数类型以及参数类型和是否有返回值
//dllname是dll路径
bool WxModule_Init( const char* dllname)
{
//取模块句柄
HMODULE hModule = LoadLibraryA(dllname);
call_func func = (call_func)GetProcAddress(hModule, "你想调用函数的名字");
//接收返回值
int s = func(1, 2);
//s==3
printf("s=%d\n", s);
} ...
|