C++ - DLL 注入器中未解析的外部
C++ - Unresolved External in DLL Injector
我真的看不出我收到此错误的原因,我已经看了一下,显然这与定义一个什么都不做的函数有关?不幸的是,我真的无法说出这里的问题是什么,所以任何帮助将不胜感激。
这是我的源代码:
主.cpp
#include <Windows.h>
#include <tlhelp32.h>
#include <shlwapi.h>
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#define WIN32_LEAN_AND_MEAN
#define CREATE_THREAD_ACCESS (PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ)
BOOL Inject(DWORD pID, const char * DLL_NAME);
DWORD GetTargetThreadIDFromProcName(const char * ProcName);
using namespace std;
char buf[MAX_PATH];
LPVOID RemoteString, LoadLib;
HANDLE Proc;
DWORD pID;
__int32 main()
{
pID = GetTargetThreadIDFromProcName("Program.exe");
buf[MAX_PATH] = {0};
GetFullPathName("DLL.dll", MAX_PATH, buf, NULL);
if(!Inject(pID, buf)) cout << ("Failed to inject!nnn");
system("pause");
return 0;
}
BOOL Inject(DWORD pID, const char * DLL_NAME)
{
char buf[50] = {0};
if(!pID) return false;
Proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);
if(!Proc) return false;
LoadLib = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(DLL_NAME), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(Proc, (LPVOID)RemoteString, DLL_NAME, strlen(DLL_NAME), NULL);
CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLib, (LPVOID)RemoteString, NULL, NULL);
CloseHandle(Proc);
return true;
}
DWORD GetTargetThreadIDFromProcName(const char * ProcName)
{
PROCESSENTRY32 pe;
HANDLE thSnapShot;
BOOL retval, ProcFound = false;
thSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(thSnapShot == INVALID_HANDLE_VALUE) return false;
pe.dwSize = sizeof(PROCESSENTRY32);
retval = Process32First(thSnapShot, &pe);
while(retval)
{
if(StrStrI(pe.szExeFile, ProcName)) return pe.th32ProcessID;
retval = Process32Next(thSnapShot, &pe);
}
return 0;
}
我得到的错误如下:
main.obj
unresolved external symbol __imp__StrStrIA@8 referenced in function "unsigned long __cdecl GetTargetThreadIDFromProcName(char const *)" (?GetTargetThreadIDFromProcName@@YAKPBD@Z)
喷油器.exe
1 unresolved externals
任何解决方案或只是一些有助于理解为什么会发生这种情况的帮助都会很棒!
如评论中所述,看起来您没有链接到shlwapi.lib
.你需要这样做才能调用StrStrI。
相关文章:
- C++:将外部库链接到dll库
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 将 c++ 生成器应用程序与外部 dll 结合使用
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- 如何将外部 dll 添加到我的 VS2019 项目?
- 放置在外部 DLL 中的类中的字符串数据的内存损坏
- 将 C 中的外部 DLL 追加到 C# 中的 WinForm 项目
- 外部DLL中缺少QT信号
- 用CPP中的参数动态调用外部DLL
- C++在外部dll上的dilogex控件上创建hdc
- Unity3D调用外部dll
- 在 AIR 本机扩展中包含外部 DLL
- 在Windows中的Qt中加载外部dll
- 将外部dll项目用于Excel的c++/xll加载项
- 外部dll、静态函数和C++中的char*关系
- 如何在CMake项目中使用外部dll
- 我可以添加外部DLL到npapi插件,应该安装在浏览器中
- 如何为CMake添加外部DLL路径
- 当从c#调用外部dll时,从命令行参数中删除空格