Пытался написать код на внедрение библиотеки в только что созданный процесс, но что-то не получается. Функция inject возвращает true, но сама библиотека в процесс не загружается. Пожалуйста, подскажите в чём проблема. Всё x64.
#include <windows.h>
#include <iostream>
bool inject(HANDLE processHandle, const wchar_t* dllPath)
{
HMODULE module = GetModuleHandle(L"kernel32.dll");
if (module)
{
FARPROC address = GetProcAddress(module, "LoadLibraryA");
if (address)
{
LPVOID memory = VirtualAllocEx(processHandle, NULL, wcslen(dllPath) + 1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if (memory)
{
if (WriteProcessMemory(processHandle, memory, dllPath, wcslen(dllPath) + 1, NULL))
{
if (CreateRemoteThread(processHandle, NULL, NULL, (LPTHREAD_START_ROUTINE)address, memory, NULL, NULL))
{
return true;
}
}
}
}
}
/* CloseHandle(processHandle);
VirtualFreeEx(processHandle, memory, 0, MEM_RELEASE); */
return false;
}
bool fileExists(LPCWSTR name)
{
return GetFileAttributesW(name) != -1;
}
int main()
{
const wchar_t APP_NAME[8] = L"app.exe";
const wchar_t DLL_64 [12] = L"library.dll";
STARTUPINFO startupInfo;
PROCESS_INFORMATION processInfo;
ZeroMemory(&startupInfo, sizeof(startupInfo));
wchar_t path[MAX_PATH];
GetFullPathName(DLL_64, MAX_PATH, path, 0);
if (CreateProcess(APP_NAME, 0, 0, 0, 0, 0, 0, 0, &startupInfo, &processInfo))
{
std::wcout << L"dll path: " << path << std::endl;
std::wcout << L"inject result: " << inject(processInfo.hProcess, path) << std::endl;
}
system("pause");
return 0;
}
В каких случаях нужно наследоваться от std :: enable_shared_from_this и зачем это делать? Увидел в примерах boost asio наследование от enable_shared_from_this, что это...
Проблема при переполнении памяти в выводе изменённой матрицыЗадача: По указанию пользователя с положительных четных или отрицательных...
У меня есть вещественные числа a, b и сНужно чтобы выполнялось выражение c == (b - a), проблема возникает именно с "равно"
Предыстория: мне нужно реализовать алгоритм быстрой сортировки для односвязного списка