C++ Debugger Fehler .dll konte nicht geladen werden?

aceex

Cadet 4th Year
Registriert
März 2013
Beiträge
110
Guten Abend,

Ich habe folgendes Problem undzwar habe ich vor kurzem mit C++ angefangen, doch beim debuggen (keine Fehler im Code) öffnet sich das Konsolen Fenster und schließt sich sofort. Der Debugger meldet, dass er einige .dll s im Windows Ordner nicht Laden kann. Ich hatte jedoch die Dateien süberprüft, sie existieren dort wo der Debugger sie sucht. Ich habe meinen Code in Visual Studio 2012 Express geschrieben. Wenn ich mich nicht irre und C++ auch mit Frameworks arbeitet dann muss es wie bei Visual Basic auch nach dem Standart 4.5 sein.

Danke im voraus!

Ideen kann ich erst morgen früh anwenden.
 
@MagicAndre1981 danke für deine interesse! Hier bitteschön:

"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Users\Aceex\Documents\Visual Studio 2012\Projects\Assault Cube Trainer (Health, Ammo)\Debug\Assault Cube Trainer (Health, Ammo).exe" geladen. Symbole wurden geladen.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\ntdll.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Program Files\AVAST Software\Avast\snxhk.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\kernel32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\KernelBase.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\user32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\gdi32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\lpk.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\usp10.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\msvcrt.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\advapi32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\sechost.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\rpcrt4.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\sspicli.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\cryptbase.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\msvcp110d.dll" geladen. Symbole wurden geladen.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\msvcr110d.dll" geladen. Symbole wurden geladen.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\imm32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\msctf.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\guard32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\version.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Assault Cube Trainer (Health, Ammo).exe" (Win32): "C:\Windows\SysWOW64\fltLib.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
Das Programm "[6992] Assault Cube Trainer (Health, Ammo).exe" wurde mit Code 0 (0x0) beendet.


Ich hoffe das hilft dir mir zu helfen :S
 
Cheater werden hier nicht unterstützt ;).

Die nicht gefundenen PDB Dateien werden afaik für Breakpoints genutzt, mal versucht das ganze als Release zu builden?
 
Zuletzt bearbeitet:
.pdb bedeutet "program database". Die Dateien enthalten Debug-Informationen und sind halt wichtig, wenn man das Programm gescheit am Debugger ausführen möchte.
Die Fehlermeldungen sagen lediglich, daß diese .pdb's nicht gefunden wurden. Die DLLs sind durchaus geladen worden. Da obendrein das Programm mit dem Exit code 0 beendet wurde, sieht es mir eher danach aus, als hätte sich das Programm ganz normal ohne Fehler beendet (ein exit code von 0 bedeutet normalerweise "success" ... alles andere ist in der Regel ein Fehler).


Laß dein Programm doch mal im Debugger laufen und steppe Schritt für Schritt durch. Dann siehst du auch, was wirklich passiert.
 
@iks-deh ja das hat da funktionier, danke!
@antred Mit Breakpoints geht das auch nicht, es ignoriert einfach alles :( ich hab ihn sogar am anfang gesetzt. ich kanns dann halt nicht debuggen nur ausführen :/

Ich habe jetzt VS 2010 versucht, im code steht kein fehler aber folgender beim debuggen.
Ich bin eig ganz neu in C++ deswegen habe ich keine ahnung wie man diese fehler behebt, bei VB hatte ich so etwas nicht. Achja dieses ist in .NET Framework 2.0:

1>------ Erstellen gestartet: Projekt: hallo welt, Konfiguration: Debug Win32 ------
1> hallo welt.cpp
1>LINK : fatal error LNK1123: Fehler bei der Konvertierung in COFF: Datei ist ungültig oder beschädigt.


muss ich da jetzt wirklich meine Programme oder .NET Frameworks deinstallieren? :(
 
Zuletzt bearbeitet:
Mach mal einen kompletten Rebuild (also clean und dann neu-übersetzen). Notfalls alle Generierergebnisse von Hand löschen.
 
Gib mal Debug 64 Bit als Zielplattform an, möglicherweise gibt es da einen Konflikt mit den Libraries.

Ist ja klar, dass er in Release die Breakpoints ignoriert. Das ist ja so, per definitionem.

Ich frag mich allerdings schon, was du da als Anfänger für ein Programm geschrieben haben willst, dass so viel exotische Libraries verwendet.
 
Zuletzt bearbeitet:
Der Linkerfehler sieht für mich so aus, als wäre irgend eine Datei nach dem Kompilieren beschädigt worden.

Tu das, was antred sagt.
 
Nein, hat leider nicht geklappt :( das selbe.
 
Danke, den LNK1123 error hats behoden, aber jetzt hab ich gleube ich das selbe problem wie mit Visual Studio 2012, das fenster öffnet sich, dann schließt es sich, aber anstatt der ganzen Fehler hat sich VS 2010 einfach aufgehangen... :(
 
Kannst du das Projekt posten, damit wir es selbst mal austesten können? Oder ist da irgend was dabei, das du nicht veröffentlichen möchtest / darfst?
 
#include <iostream>
#include <Windows.h>
#include <string>
#include <ctime>

DWORD FindDmaAddy(int PointerLevel, HANDLE hProcHandle, DWORD Offsets[], DWORD BaseAddress);
void WriteToMemory(HANDLE hProcHandle);




std::string GameName = "AssaultCube";
LPCSTR LGameWindow = "AssaultCube";
std::string GameStatus;


bool IsGameAvail;
bool UpdateOnNextRun;

//AMMO VARS
bool AmmoStatus;
BYTE AmmoValue[] = {0xA3, 0x1C, 0x0, 0x0};
DWORD AmmoBaseAddress = {0x004df73C};
DWORD AmmoOffsets[] = {0x378, 0x14, 0x0};

//HEALTH VARS
bool HealthStatus;
BYTE HealthValue[] = {0x39, 0x5, 0x0, 0x0};
DWORD HealthBaseAddress = {0x004df73C};
DWORD HealthOffsets[] = {0xF4};

int main()
{
HWND hGameWindow = NULL;
int timeSinceLastUpdate = clock();
int GameAvailTMR = clock();
int onePressTMR = clock();
DWORD dwProcID = NULL;
HANDLE hProcHandle = NULL;
UpdateOnNextRun = true;
std::string sAmmoStatus = "OFF";
std::string sHealthStatus = "OFF";

while(GetAsyncKeyState(VK_INSERT))
{
if(clock() - GameAvailTMR > 100)
{
GameAvailTMR = clock();
IsGameAvail = false;

hGameWindow = FindWindow(NULL, LGameWindow);
if(hGameWindow)
{
GetWindowThreadProcessId( hGameWindow, &dwProcID);
if(dwProcID != 0)
{
hProcHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcID);
if(hProcHandle == INVALID_HANDLE_VALUE || hProcHandle == NULL)
{
GameStatus = "Failed to open process for valid handle";

}
else
{
GameStatus = "Assault Cube Ready To Hack";
IsGameAvail = true;
}
}
else
{
GameStatus = "Failed to get process ID";
}
}
else
{
GameStatus = "AssaultCube not found";
}

if(UpdateOnNextRun || clock() - timeSinceLastUpdate > 5000)
{
system("cls");
std::cout << "------------------------------------------" << std::endl;
std::cout << " AssaultCube Memory hacker" << std::endl;
std::cout << "------------------------------------------" << std::endl << std::endl;
std::cout << "Game Status:" << GameStatus << std::endl << std::endl;
std::cout << "[F1] Unlimited ammo -> " << AmmoStatus << " <- " << std::endl << std::endl;
std::cout << "[F2] Unlimited health -> " << HealthStatus << " <- " << std::endl << std::endl;
std::cout << "[INSERT] Exit" << std::endl;
UpdateOnNextRun = false;
timeSinceLastUpdate = clock();

}

if(IsGameAvail)
{
WriteToMemory(hProcHandle);
}

}

if(clock() - onePressTMR > 400)
{
if(IsGameAvail)
{
//AMMO
if(GetAsyncKeyState(VK_F1))
{
onePressTMR = clock();
AmmoStatus = !AmmoStatus;
UpdateOnNextRun = true;
if(AmmoStatus)sAmmoStatus = "ON";
else sAmmoStatus = "OFF";
}
//HEALTH
else if(GetAsyncKeyState(VK_F2))
{
onePressTMR = clock();
HealthStatus = !HealthStatus;
UpdateOnNextRun = true;
if(HealthStatus)sHealthStatus = "ON";
else sHealthStatus = "OFF";
}
}
}




}
CloseHandle(hProcHandle);
CloseHandle(hGameWindow);

return ERROR_SUCCESS;

}

DWORD FindDmaAddy(int PointerLevel, HANDLE hProcHandle, DWORD Offsets[], DWORD BaseAddress)
{
DWORD pointer = BaseAddress;
DWORD pTemp;

DWORD pointerAddr;
for(int c = 0; c < PointerLevel; c++)
{
if(c == 0)
{
ReadProcessMemory(hProcHandle, (LPCVOID)pointer, &pTemp, sizeof(&pTemp), NULL);

}

pointerAddr = pTemp + Offsets[c];
ReadProcessMemory(hProcHandle, (LPCVOID)pointerAddr, &pTemp, sizeof(pTemp), NULL);

}
return pointerAddr;


}


void WriteToMemory(HANDLE hProcHandle)
{
DWORD AddressToWrite;
if(AmmoStatus)
{
AddressToWrite = FindDmaAddy(3, hProcHandle, AmmoOffsets, AmmoBaseAddress);
WriteProcessMemory(hProcHandle,(BYTE*)AddressToWrite, &AmmoValue, sizeof(AmmoValue), NULL);

}

if(HealthStatus)
{
AddressToWrite = FindDmaAddy(1, hProcHandle, HealthOffsets, HealthBaseAddress);
WriteProcessMemory(hProcHandle,(BYTE*)AddressToWrite, &HealthValue, sizeof(HealthValue), NULL);

}
}

ne, ne hier ist es :)
 
Ok, hab's mal eben debuggt (solltest du übrigens auch tun ... dein Debugger kann dir Stunden unnötiger Zeitverschwendung ersparen). Dein Problem liegt in der Zeile

Code:
while(GetAsyncKeyState(VK_INSERT))

Diese Bedingung ist nämlich false, und damit hat es sich in deinem Programm ja eigentlich schon. Du trittst also nie in deine while-Schleife ein. Lies dir mal genau die Doku zur GetAsyncKeyState-Funktion durch: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx

Return value

Type: SHORT

If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. However, you should not rely on this last behavior; for more information, see the Remarks.

The return value is zero for the following cases:

The current desktop is not the active desktop
The foreground thread belongs to another process and the desktop does not allow the hook or the journal record.

Ich weiß jetzt, ohne mich vorher aufzuschlauen, nicht, was es konkret bedeutet, daß der aktuelle Desktop nicht der derzeit aktive Desktop ist, aber in dieser Richtung liegt dein Problem.
Ergänzung ()

antred schrieb:
Ok, hab's mal eben debuggt (solltest du übrigens auch tun ... dein Debugger kann dir Stunden unnötiger Zeitverschwendung ersparen).

Sorry, daß ich mich jetzt hier selbst zitiere. ;) Bitte die Aufforderung, du solltest auch debuggen ignorieren. Mein alterndes Hirn hatte hier einen Aussetzer. Du sagtest ja bereits mehrmals, daß du schon versucht hast, zu debuggen.
 
Danke! Jetzt gibts auch keine Fehler mehr... nur hab ich den LNK1168 aber das liegt im code drinne und nicht an VS. ich hätte aber schon gerne VS2012 am laufen... :/
 
Also, ich hab's eben mal mit Visual Studio 2012 versucht, und abgesehen davon, daß deine while-Schleife (wie oben erwähnt) nicht anschlägt, läuft das Programm ohne zu Murren durch.
Ergänzung ()

Ach ja, übrigens ... falls du die Debugsymbole für die System-DLLs auch haben möchtest:

Im Visual Studio Menü -> Tools -> Options -> Debugging -> Symbols -> Häkchen bei "Microsoft Symbol Servers" setzten und bei "Cache Symbols in this directory" ein Verzeichnis auswählen, in dem die .pdb's abgelegt werden sollen.
 
antred schrieb:
Ach ja, übrigens ... falls du die Debugsymbole für die System-DLLs auch haben möchtest

das hat das Problem mit den .dlls endlich gelöst!! Größten Dank!!
 
Zurück
Oben