Bug in RAD Studios 2007 ?



  • Hallo ich habe folgenden Code der bei mir Probleme macht.

    Wenn ich das Programm mit RAD Studios 2007 innerhalb der IDE Compiliere und ausführe dann funktioniert alles ohne Probleme.

    Wenn ich jedoch in den Ordner gehe wo die EXE Datei(das compilierte Programm) gespeichert ist und ich diese aufrufe dann bekomme ich bei GetLastError(); den Fehlercode 5 heraus (5=Access denied)

    Also hab ich alles zu sicherheit nochmal mit dem Borland C++ Builder 6 compiliert um zu sehen ob es da geht. (Da ich mir 100% sicher bin das der code richtig ist). In der IDE vom Borland C++ Builder 6 funktionierte sowie wenn ich die EXE Datei (das compilierte Programm) manuell ausgeführt habe.

    #include <iostream>
    #include <windows>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    
    HANDLE handle;
    DWORD ID=0;
    HWND hwnd = FindWindow(0,"test" );
    
    		if(hwnd==0)
    		{
    				cout<<"Fenster nicht gefunden"<<endl;
    				system("PAUSE");
    				return 0;
    		}
    
    		GetWindowThreadProcessId(hwnd, &ID);
    		handle = OpenProcess(PROCESS_ALL_ACCESS, false, ID);
    
    		if ( handle == 0 )
    		{
    				cout<<"OpenProcess error: " << GetLastError()<<endl;
    		}
    
    		cout<<"handle: " << handle<<endl;
    
    		cin.get();
    		return 0;
    }
    

    Im Debugger erzeugt RAD Studios 2007 folgendes:

    004011CF  |. FF75 F8        PUSH DWORD PTR SS:[EBP-8]                ; /ProcessId
    004011D2  |. 6A 00          PUSH 0                                   ; |Inheritable = FALSE
    004011D4  |. 68 FFFF1F00    PUSH 1FFFFF                              ; |Access = TERMINATE|CREATE_THREAD|VM_OPERATION|VM_READ|VM_WRITE|DUP_HANDLE|CREATE_PROCESS|SET_QUOTA|SET_INFORMATION|QUERY_INFORMATION|SYNCHRONIZE|STANDARD_RIGHTS_REQUIRED|F804
    004011D9  |. E8 02520000    CALL <JMP.&KERNEL32.OpenProcess>         ; \OpenProcess
    

    Der Borland C++ Builder 6 erzeugt:

    004011C7  |. FF75 F8        PUSH DWORD PTR SS:[EBP-8]                ; /ProcessId
    004011CA  |. 6A 00          PUSH 0                                   ; |Inheritable = FALSE
    004011CC  |. 68 FF0F1F00    PUSH 1F0FFF                              ; |Access = PROCESS_ALL_ACCESS
    004011D1  |. E8 AE0F0000    CALL <JMP.&KERNEL32.OpenProcess>         ; \OpenProcess
    

    Das hier ist die interessante Stelle:

    RAD Studios 2007:

    004011D4  |. 68 FFFF1F00    PUSH 1FFFFF                              ; |Access = TERMINATE|CREATE_THREAD|VM_OPERATION|VM_READ|VM_WRITE|DUP_HANDLE|CREATE_PROCESS|SET_QUOTA|SET_INFORMATION|QUERY_INFORMATION|SYNCHRONIZE|STANDARD_RIGHTS_REQUIRED|F804
    

    Borland C++ Builder 6:

    004011CC  |. 68 FF0F1F00    PUSH 1F0FFF                              ; |Access = PROCESS_ALL_ACCESS
    

    Hat wer von euch auch vielleicht RAD Studios 2007 und kann das mal überprüfen ob das bei ihm auch so ist?

    [Wenn ich das Binary von RAD Studios umpatche auf

    PUSH 1F0FFF
    

    und abspeichere dann funktioniert es.]



  • Btw. wenn ich das Programm mit RAD Studios compiliere und einen Breakpoint auf OpenProcess mache und da dann den Debugger von RAD Studios anhänge dann steht dort auch

    PUSH 001fffff
    

    .


Anmelden zum Antworten