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. mitBOOL 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 Loaderjmp 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 datacode
mov ax ,data
mov ds,ax
jmp _mainalso es wird erst die adresse geladen und dann das programm
cu...