Hey,
ich versuche gerade alle calls eines programmes aufzulisten. Ich lese halt die komplette ".text" section ein und überprüfe dann byte für byte ob es ein 0xE8 ist, aber da ist auch mein Problem. Es werden mir halt alle Calls ausgegeben(vermute ich), aber auch die Adressen wo es keine Calls gibt sonder einfach nur 0xE8 steht. Kann ich irgendwie überprüfen ob das nun wirklich ein Call ist, weil die selben Probleme werden ja auch bei anderen Befehlen auftreten wenn ich z.b alle mov auslesen möchte.
ich versuche gerade alle calls eines programmes aufzulisten. Ich lese halt die komplette ".text" section ein und überprüfe dann byte für byte ob es ein 0xE8 ist, aber da ist auch mein Problem. Es werden mir halt alle Calls ausgegeben(vermute ich), aber auch die Adressen wo es keine Calls gibt sonder einfach nur 0xE8 steht. Kann ich irgendwie überprüfen ob das nun wirklich ein Call ist, weil die selben Probleme werden ja auch bei anderen Befehlen auftreten wenn ich z.b alle mov auslesen möchte.
Code:
ofile.open("C:/BLAA.txt");
GetPeInfo(myProcessInfos.szExeName,&myPeInfo);
unsigned char *lpCode = (unsigned char*)malloc(myPeInfo.dwImageSize);
ReadProcessMemory(hProcess,(LPVOID)(myPeInfo.dwImageBase + myPeInfo.dwBaseOfCode),lpCode,myPeInfo.dwEndOfCode,0);
for(int i = 0; i <myPeInfo.dwEndOfCode;i++)
{
if(lpCode[i] == 0xE8)
{
DWORD dwCallAdress;
ReadProcessMemory(hProcess,(LPVOID)(myPeInfo.dwImageBase + myPeInfo.dwBaseOfCode + i + 1),&dwCallAdress,4,0);
ofile << "Position: " << hex << myPeInfo.dwImageBase + myPeInfo.dwBaseOfCode + i << " " << "Call zu: " <<myPeInfo.dwImageBase + myPeInfo.dwBaseOfCode+i+5+dwCallAdress << endl;
}
}