Начинающий
- Статус
- Оффлайн
- Регистрация
- 1 Ноя 2024
- Сообщения
- 13
- Реакции
- 0
Ошибка:
1>hook.c
1>trampoline.c
1>Создание кода...
1>x64\Debug\hook.obj : warning LNK4042: объект указан более одного раза; лишние не учитываются
1>ESP.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl overlay_start_hook(void)" (?overlay_start_hook@@YAXXZ) в функции DllMain.
1>C:\Users\Alex\Desktop\ESP\34\x64\Debug\ESP.dll : fatal error LNK1120: неразрешенных внешних элементов: 1
1>Сборка проекта "ESP.vcxproj" завершена с ошибкой.
========== Сборка: успешно выполнено — 0 , со сбоем — 1, в актуальном состоянии — 0, пропущено — 0 ==========
========== Сборка завершено в 23:50 и заняло 03,844 с ==========
Hook.cpp
ESP.cpp
hook.hpp
---
Дерево файлов:
Доп. каталоги включаемых файлов: $(ProjectDir)external\imgui;$(ProjectDir)external\imgui\backends;$(ProjectDir)external\minhook\include;$(ProjectDir)external\minhook\src;$(ProjectDir)external\minhook\src\hde;
Использую C++20
---
Еще что-то, может пригодится
Вопрос в том, почему вроде все правильно, а вроде ничего не работает, может я что-то не понимаю или не досмотрел? Надеюсь на вашу помощь
1>hook.c
1>trampoline.c
1>Создание кода...
1>x64\Debug\hook.obj : warning LNK4042: объект указан более одного раза; лишние не учитываются
1>ESP.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl overlay_start_hook(void)" (?overlay_start_hook@@YAXXZ) в функции DllMain.
1>C:\Users\Alex\Desktop\ESP\34\x64\Debug\ESP.dll : fatal error LNK1120: неразрешенных внешних элементов: 1
1>Сборка проекта "ESP.vcxproj" завершена с ошибкой.
========== Сборка: успешно выполнено — 0 , со сбоем — 1, в актуальном состоянии — 0, пропущено — 0 ==========
========== Сборка завершено в 23:50 и заняло 03,844 с ==========
Hook.cpp
C++:
#include <Windows.h>
#include <d3d11.h>
#include <dxgi.h>
#include "MinHook.h"
#include "imgui.h"
#include "imgui_impl_win32.h"
#include "imgui_impl_dx11.h"
#include "hook.h"
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "dxgi.lib")
typedef HRESULT(__stdcall* Present_t)(IDXGISwapChain*, UINT, UINT);
Present_t oPresent = nullptr;
ID3D11Device* g_pd3dDevice = nullptr;
ID3D11DeviceContext* g_pd3dDeviceContext = nullptr;
bool imgui_inited = false;
void RenderOverlay()
{
ImGui::Begin("Overlay ESP Example", nullptr, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
ImGui::Text("DX11 ImGui Overlay works!");
ImGui::Text("FPS: %.1f", ImGui::GetIO().Framerate);
ImGui::End();
}
HRESULT __stdcall hkPresent(IDXGISwapChain* pSwap, UINT Sync, UINT Flags)
{
if (!imgui_inited)
{
if (!g_pd3dDevice)
{
pSwap->GetDevice(__uuidof(ID3D11Device), (void**)&g_pd3dDevice);
g_pd3dDevice->GetImmediateContext(&g_pd3dDeviceContext);
}
DXGI_SWAP_CHAIN_DESC sd;
if (SUCCEEDED(pSwap->GetDesc(&sd)) && sd.OutputWindow && IsWindow(sd.OutputWindow))
{
ImGui::CreateContext();
ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);
ImGui_ImplWin32_Init(sd.OutputWindow);
imgui_inited = true;
}
}
if (imgui_inited)
{
ImGui_ImplDX11_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
RenderOverlay();
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
}
return oPresent(pSwap, Sync, Flags);
}
DWORD WINAPI FindAndHookPresent(LPVOID)
{
WNDCLASSEX wc = { sizeof(wc), CS_CLASSDC, DefWindowProc,0,0,GetModuleHandle(NULL),NULL,NULL,NULL,NULL, L"dummy", NULL };
RegisterClassEx(&wc);
HWND hwnd = CreateWindowW(wc.lpszClassName, L"dummy", WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, 0, 0, wc.hInstance, 0);
D3D_FEATURE_LEVEL lvl;
IDXGISwapChain* pSwap = nullptr;
ID3D11Device* pDev = nullptr;
ID3D11DeviceContext* pCtx = nullptr;
DXGI_SWAP_CHAIN_DESC scd = {};
scd.BufferCount = 1; scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
scd.OutputWindow = hwnd; scd.SampleDesc.Count = 1; scd.Windowed = TRUE; scd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
if (SUCCEEDED(D3D11CreateDeviceAndSwapChain(
nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, 0, nullptr, 0, D3D11_SDK_VERSION,
&scd, &pSwap, &pDev, &lvl, &pCtx)))
{
void** vtbl = *reinterpret_cast<void***>(pSwap);
MH_Initialize();
MH_CreateHook(vtbl[8], &hkPresent, reinterpret_cast<void**>(&oPresent));
MH_EnableHook(vtbl[8]);
pSwap->Release(); pDev->Release(); pCtx->Release();
}
DestroyWindow(hwnd);
UnregisterClass(wc.lpszClassName, wc.hInstance);
return 0;
}
void overlay_start_hook(){
CreateThread(0, 0, FindAndHookPresent, 0, 0, 0);
}
ESP.cpp
C++:
#include <Windows.h>
#include "hook.hpp"
BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID)
{
if (reason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hModule);
overlay_start_hook();
}
return TRUE;
}
hook.hpp
C++:
#pragma once
void overlay_start_hook();
---
Дерево файлов:
Доп. каталоги включаемых файлов: $(ProjectDir)external\imgui;$(ProjectDir)external\imgui\backends;$(ProjectDir)external\minhook\include;$(ProjectDir)external\minhook\src;$(ProjectDir)external\minhook\src\hde;
Использую C++20
---
Еще что-то, может пригодится
Вопрос в том, почему вроде все правильно, а вроде ничего не работает, может я что-то не понимаю или не досмотрел? Надеюсь на вашу помощь
