试图导出一个函数并调用它
trying to export a function and call it
我正试图调用dll中的一个函数。
DLL被注入另一个进程,所以我需要能够在将导出的函数注入目标进程后调用它。
我导出的函数如下:
#define EXTERN_DLL_EXPORT extern "C" __declspec(dllexport)
EXTERN_DLL_EXPORT void InjectPacketToServer(unsigned char *packet, int length)
{
int value;
int senderoffset = 0x0075F8D8;
__asm
{
mov eax, senderoffset
mov value, eax
}
memcpy((void*)SEND_CODE_CAVE, (void*)packet, length);
int SenderID = *(int*)value;
int PacketLength = length;
int Send = 0x00577A90;
__asm
{
mov edx, PacketLength
push edx
mov eax, SEND_CODE_CAVE
push eax
mov ecx, [SenderID]
call Send
}
}
我试着这样称呼它:
#include <Windows.h>
typedef int (*InjectPacketToServer)(unsigned char *packet, int length);
InjectPacketToServer Inject;
BYTE packet[3] = { 0x13, 0x01, 0x01};
int length = 3;
int main()
{
HRESULT ret;
HMODULE pModule;
pModule = LoadLibrary("baram.dll");
ret = GetLastError();
Inject = (InjectPacketToServer)GetProcAddress(pModule, "InjectPacketToServer");
ret = GetLastError();
Inject(packet, length);
return ret;
}
我收到错误:
ret 0x000003e6 : Invalid access to memory location. HRESULT
在这条线上:
pModule = LoadLibrary("baram.dll");
有人能告诉我我在这里做错了什么吗?
感谢您的帮助!
你在谷歌上搜索过吗?
MS支持称原因是:
Windows NT状态代码status_ACCESS_VIOLATION被映射到Win32错误代码error_NOACCESS。因此,如果操作系统加载程序在映射指定的DLL文件映像或执行启动代码时遇到访问冲突(异常C0000005),加载程序将把最后一个错误设置为998(error_NOACCESS),LoadLibrary()函数将失败,返回值为NULL。
并且您应该
若要解决LoadLibrary()故障,请在调试器下运行应用程序,并为C0000005访问违规异常启用首次机会异常处理。如果在调用LoadLibrary()函数时发生访问冲突,则应用程序将闯入调试器。然后可以使用调试器的调用堆栈来跟踪异常发生的位置。堆栈跟踪应该可以帮助您缩小与遇到的异常相关的实际问题。
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何仅为一个函数添加延迟
- 构造函数正在调用一个使用当前类类型的函数
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 在c++中的复制构造函数/一个声明语句中的初始化的延续中使用chain方法
- C :基类调用自己的虚拟函数 - 一个反图案
- 如何在这个交换函数(一个单独的链表)中找到错误
- 两个相同的函数(一个使用模板模式,另一个不使用)
- 你怎么能一次给一个函数一个参数呢
- 为什么要做两个函数?(一个是非const,另一个是const)
- 当代码在其他地方使用时,如何保证函数一个接一个地被调用