- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一些示例程序和 DLL 来学习 DLL 注入(inject)的概念。
我将DLL注入(inject)示例程序的注入(inject)代码如下(错误处理省略):
std::wstring dll(L"D:\\Path\\to\\my\\DLL.dll");
LPTHREAD_START_ROUTINE pLoadLibraryW =
(LPTHREAD_START_ROUTINE)GetProcAddress(hKernel32, "LoadLibraryW");
int bytesNeeded = WideCharToMultiByte(CP_UTF8, 0, dll.c_str(), dll.length(),
NULL, 0, NULL, NULL);
std::vector<byte> dllName(bytesNeeded);
WideCharToMultiByte(CP_UTF8, 0, dll.c_str(), dll.length(),
(LPSTR)&dllName[0], bytesNeeded, NULL, NULL);
// Memory is a class written by me to simplify memory processes.
// Constructor takes desired permissions.
Memory mem (pid, false, true, false, true, false, false, false,
false, false, true, true, true, false);
// Ensures deletion of the allocated range.
// true / true / false = read and write access, no execute permissions
std::tr1::shared_ptr<void> allocated =
mem.AllocateBytes(dllName.size(), true, true, false);
mem.WriteBytes((unsigned int)allocated.get(), dllName);
mem.CreateThread(pLoadLibraryW, allocated.get());
Memory::CreateThread如下:
void Memory::CreateThread(LPTHREAD_START_ROUTINE address, LPVOID parameter) const {
std::tr1::shared_ptr<void> hThread(CreateRemoteThread(m_hProcess.get(),
NULL, 0, address, parameter, 0, NULL), CloseHandle);
if (hThread.get() == NULL) {
throw std::runtime_error("Memory::CreateThread: CreateRemoteThread failed");
}
DWORD returned = WaitForSingleObject(hThread.get(), INFINITE);
if (returned != WAIT_OBJECT_0) {
throw std::runtime_error("Memory::CreateThread: The remote thread did not complete properly");
}
}
问题是模块没有加载。但是,当我将第二行更改为
LPTHREAD_START_ROUTINE pLoadLibraryW =
(LPTHREAD_START_ROUTINE)GetProcAddress(hKernel32, "LoadLibraryA");
它有效(因为测试 dll 的名称中没有 unicode 字符)。
如何让它与 LoadLibraryW
一起工作?
最佳答案
HMODULE WINAPI LoadLibrary(
__in LPCTSTR lpFileName
);
它需要一个 TCHAR——所以 LoadLibraryW 的参数必须是一个宽字符串;上面的代码传递了参数的多字节形式,这是 LoadLibraryA 想要的形式。
关于c++ - LoadLibraryW 在 LoadLibraryA 完成工作时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1584502/
我正在尝试从另一个 dll 加载一个 dll(通过 LoadLibraryA)。这是问题所在: c:\**EXE_DIR**\myExe.exe // this exe loa
我正在为 Windows 编译一个程序。 我希望它检查系统中是否存在 foo.dll,如果不存在,则打印一条错误消息并退出。这样做安全吗: 将/DELAYLOAD foo.dll标志传递给链接器; 在
我绕过 LoadLibraryA,以阻止该函数被调用到我的应用程序中。它旨在阻止'dll注入(inject)'。如果您从未见过这些,请引用著名的 CDetour 库。 它hook了加载库函数甚至成功返
我编写了一些示例程序和 DLL 来学习 DLL 注入(inject)的概念。 我将DLL注入(inject)示例程序的注入(inject)代码如下(错误处理省略): std::wstring dll(
我正在尝试像这样加载一个 dll: dll_handle = LoadLibraryA(QString("%1\\module.dll") .arg(Q
DWORD dwLoadLibrary = (DWORD)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA"); 当我转到
我们正在尝试使用 LoadLibraryA 函数从 64 位 dll 中加载一个 dll 库。它返回 126 错误 - 找不到模块。给函数的 dll 文件路径是正确的,我们确信。 我们已经尝试了一个虚
我已经使用 VS2008 向导创建了一个 MFCApp。在我的应用程序的“InitInstance()”中,我正在调用“LoadLibraryA()”方法,因为我需要加载一些 dll 文件。但是一旦我
所以我有一个汇编代码块,它初始化一个程序,解析 kernel32,找到 GetProcAddress,然后找到 LoadLibarayA 来加载 User32.dll。它工作到 LoadLibrary
在 vc++ 中,我有一个包含两个项目的解决方案。项目 A 有一个 dllLoader.h 和 dllLoader.cpp 用 LoadLibrary 加载一个 dll 我需要调用它在项目 B 中的功
我是一名优秀的程序员,十分优秀!