好的,我有几个关于使用AllocConsole的问题,我找不到很多答案,我发现的一些解决方案与我的代码或其他东西不兼容,因为它们没有做我想让他们做的事情。
所以在我开始之前是我的代码:
#include "stdafx.h" // don't forget to include "Windows.h" inside stdafx.h
#include <iostream>
DWORD LocalPlayer_Offset = 0xA30504;
DWORD FlashDuration_Offset = 0xA2F8;
DWORD Jump_Offset = 0x4EE0D38;
DWORD Flag_Offset = 0x100;
DWORD BaseAddress = 0;
DWORD* Jump = nullptr;
DWORD* LocalPlayer = nullptr;
int flashActive = 1;
int bhopActive = 1;
using namespace std;
void Init()
{
BaseAddress = reinterpret_cast< DWORD >(GetModuleHandle("client"));
Jump = reinterpret_cast< DWORD* >(BaseAddress + Jump_Offset);
LocalPlayer = reinterpret_cast< DWORD* >(BaseAddress + LocalPlayer_Offset);
//These don't print to the console?
AllocConsole();
printf("injected");
cout << "injected";
}
void InitStub() { return; }
DWORD WINAPI functions(LPVOID lpParam)
{
while (1)
{
if (*LocalPlayer) // check for nullptr
{
if (bhopActive) {
if (*reinterpret_cast<BYTE*>(*LocalPlayer + Flag_Offset) & 1 &&
GetAsyncKeyState(VK_SPACE) & (1 << 15))
*Jump = 6;
}
if (flashActive) {
if (*reinterpret_cast<float*>(*LocalPlayer + FlashDuration_Offset) > 0.f)
*reinterpret_cast<float*>(*LocalPlayer + FlashDuration_Offset) = 0.f;
}
}
}
}
void functionsStub() { return; }
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
Init();
CreateThread(nullptr, 0, functions, nullptr, 0, nullptr);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
return TRUE;
case DLL_PROCESS_DETACH:
return TRUE;
}
return TRUE;
}
这一切都很好,所以不要因为代码而激怒我,我对内部人员来说很新,我正在努力学习。
我的问题是在Init()函数中,printf和cout不会向AllocConsole()函数打印任何内容。它确实成功打开一个控制台,该过程使用该控制台,所以我知道它工作正常。为什么不打印到控制台,我可以在程序中使用其他功能的控制台。
此外,这个AllocConsole自行关闭时会崩溃应用程序,这是因为它不是免费的吗?我不确定如何成功使用FreeConsole,因为AllocConsole也没有按照我想要的方式工作。