Programm per Assembler starten?



  • Hi,

    jetzt mal aus reiner neugierde, wie startet man programme per Assembler? z.B. NotePad.exe

    Also nur mal so aus reinem interesse 🙂

    [ Dieser Beitrag wurde am 18.11.2002 um 15:33 Uhr von Ikari editiert. ]



  • Also unter Win würde mensch das mit nem API-Call machen.
    z.B. mit

    BOOL CreateProcess(
    
        LPCTSTR lpApplicationName,  // pointer to name of executable module 
        LPTSTR lpCommandLine,   // pointer to command line string
        LPSECURITY_ATTRIBUTES lpProcessAttributes,  // pointer to process security attributes 
        LPSECURITY_ATTRIBUTES lpThreadAttributes,   // pointer to thread security attributes 
        BOOL bInheritHandles,   // handle inheritance flag 
        DWORD dwCreationFlags,  // creation flags 
        LPVOID lpEnvironment,   // pointer to new environment block 
        LPCTSTR lpCurrentDirectory, // pointer to current directory name 
        LPSTARTUPINFO lpStartupInfo,    // pointer to STARTUPINFO 
        LPPROCESS_INFORMATION lpProcessInformation  // pointer to PROCESS_INFORMATION  
       );
    
    //oder
    
    UINT WinExec(
    
        LPCSTR lpCmdLine,   // address of command line 
        UINT uCmdShow   // window style for new application 
       );
    

    Das wäre das einfachste und sinvollste unter Windows. Du siehst, das hängt einfach unheimlich vom OS ab. Mensch könnte mit etwas trixerei auch so verfahren:
    1. Massig Speicher allokieren
    2. Programm da rein laden
    3. Einsprungpunkt suchen
    4. Ausführen
    5. Programm beim Crashen zuschauen
    6. Erkennen, dass der Code am falschen Offset lag
    7. Programm so umschreiben, dass Vorne viel Platz ist und hinten der Loader

    jmp start
    db ...
    start:
    ...
    

    8. Dran denken nur den Code darein zu laden
    9. Programm testen, und crash beobachten
    10. Sich Gedanken um das Datensegment (oder mehrere) machen
    ...

    Also nen eigenen Loader zu implementieren, ist weder nötig noch nützlich, und es gilt dabei ne Menge (vorallem im PM) zu beachten (besonders wenn das prog in den unteren Ringen liegt).

    mfg
    -bg-



  • wie macht man das denn wenn man ein OS Codet und dafür programme starten will? Ich mein die C/C++ Funktionen kann man da ja sehr schlecht benutzen, oder?



  • Dann schreibst du die API-Implementierung und rufst die dann auf 🙂

    Ich hab es ja schon angedeuted, im PM legst du n neues Codesegment evntl. auch Datensegment, Kopierst den Code aus der Executeable (mit Daten wird halt auch so verfahren), dann änderst du deinen TaskManager ab, so daß der Task gestartet wird.

    Am besten schaust du dir mal das in der FAQ das PMode-Tutorial von der fh-zwickau an.

    mfg
    -bg-



  • unter Win wie ober gesagt mit CreateProcess

    aber normal :

    muss man die adresse im speicher kennen :

    data selector
    dw ?
    end data

    code

    mov ax ,data
    mov ds,ax
    jmp _main

    also es wird erst die adresse geladen und dann das programm

    cu...


Anmelden zum Antworten