PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ASM] Linux



Crash-Override
02.08.2005, 15:01
Das sich Linux erstaunlich gut (besser als Windows) über Assembler programmieren lässt durfte ich herausfinden. Das es "anders" (wie so oft) ist wahr klar, aber das bekomm ich schon hin, dachte ich mir, und hab auch fast alles hinbekommen. Jetzt sitz ich aber grad an einem 300 Seiten Datenblatt über die Linux-System aufrufe und zieh mir die wichtigsten rein. Was zur Hölle soll der Aufruf "fork'" Nr. 002?

Linus geht in seinem Buch kurz auf die wichtigsten 6 Aufrufe ein, und Fork beschreibt er wie folgt:




Dann gibt es das Konzept des fork, das den grundlegenden Unix-Operationen angehört. Wenn ein Prozess einen fork ausführt, legt er eine komplette Kopie seiner selbst an. Auf diese Weise bekommst du identische Kopien. Die Kind-Kopie wird meistens dazu benutzt, einen anderen Prozess auszuführen - sich selbst durch ein neues Programm zu ersetzen. Das ist die zweite elementare Funktion.


Nun frag ich mich wozu ein neues Programm dafür ausführen, warum kann ich das nicht einfach aus dem aktuellen Programm? Linux/Unix kennt doch afaik keinen exklusiven Zugriff auf Dateien, deshalb kann man doch Dateien verändern auch wenn sie gerade ausgeführt werden...

__________________

Desweiteren hat jemand noch ein paar Links zum Thema Assembler unter Linux? Viel hab ich nicht gefunden...



;###################################;
;# Hello World from ASM [Linux] #;
;###################################;

section .text
global _start

;###################################;
;# Variablen #;
;###################################;

msg_hello db 'Hello world',0x0A ; Text incl. Zeilenumbruch LF (0x0A)
len_hello equ $ - msg_hello ; Länge des Textes berechnen (12 Bytes)

;###################################;
;# START #;
;###################################;

_start: ; Jear, hier fängt's an...

mov eax,4 ; Systemaufruf Nr. 4 (sys_write) zur Textausgabe
mov ebx,1 ; Ausgabekanal Nr.1 = stdout
mov ecx,msg_hello ; Adresse des Textes im Speicher
mov edx,len_hello ; Länge des Textes in Bytes
int 0x80 ; Jetzt ausführen!

mov eax,1 ; Systemaufruf Nr. 1 (sys_exit) um Programmende hervorzurufen
int 0x80 ; Und ab damit...

Assembler ist einfach coll: Hello World very easy... (NASM-Code)

Rolus
02.08.2005, 16:57
Das sich Linux erstaunlich gut (besser als Windows) über Assembler programmieren lässt durfte ich herausfinden.
Ansichtssache.

Was zur Hölle soll der Aufruf "fork'" Nr. 002?
AFAIK wird fork generell häufig benutzt um einfach neue Prozesse zu erstellen (Elternprozess arbeitet halt normal weiter - Kind macht was anderes). Kannst dir dazu ja mal das hier (http://www.ultimate-science.de/ProzesseV1.1.htm) durchlesen. Normalerweise sucht man sich aber die Calls zusammen, die man braucht und nicht umgekehrt. ;)

Desweiteren hat jemand noch ein paar Links zum Thema Assembler unter Linux? Viel hab ich nicht gefunden...
Hm, außer http://asm.sourceforge.net/ kenn' ich auch nicht sehr viele Seiten dazu. Aber warum sollte es da auch viele Tutorials zu geben? Wenn man Assembler kann und eine Liste der System-Calls hat, steht einem doch nichts mehr im Weg. Und os-unabhängige Assembler-Tutorials gibt's im Internet eigentlich recht viele.
Hm, naja ich wollte auch mal 'ne Linux-Asm Seite machen, wurde aber aus Faulheitsgründen auf unbestimmte Zeit verschoben. Kannst ja selbst mal eine Seite dazu machen .. :)



;###################################;
;# Hello World from ASM [Linux] #;
;###################################;

section .text
global _start

;###################################;
;# Variablen #;
;###################################;

msg_hello db 'Hello world',0x0A ; Text incl. Zeilenumbruch LF (0x0A)
len_hello equ $ - msg_hello ; Länge des Textes berechnen (12 Bytes)

;###################################;
;# START #;
;###################################;

_start: ; Jear, hier fängt's an...

mov eax,4 ; Systemaufruf Nr. 4 (sys_write) zur Textausgabe
mov ebx,1 ; Ausgabekanal Nr.1 = stdout
mov ecx,msg_hello ; Adresse des Textes im Speicher
mov edx,len_hello ; Länge des Textes in Bytes
int 0x80 ; Jetzt ausführen!

mov eax,1 ; Systemaufruf Nr. 1 (sys_exit) um Programmende hervorzurufen
int 0x80 ; Und ab damit...

Öhm, schön. Aber was sollen wir damit?

freundliche Grüße, Rolus

Sunny3k
04.08.2005, 22:08
Du musst den Pointer per Nerd_Get() auf die Zeile 569 lenken!

Crash-Override
04.08.2005, 22:19
Du musst den Pointer per Nerd_Get() auf die Zeile 569 lenken!

Lass mich raten? Du bist ein 2. Account von Yannus (oder wie Sunny jetzt heißt) :D

Oder moment? Dann bist du ja nach deiner Ortsangabe ein motherfu**er... :rolleyes:

Na seis drum.. Vll sollte man dich im auge behalten

DFYX
04.08.2005, 23:44
Zu spät, die Admins waren schneller. So lob ich mir das. Wenn sie doch nur bei d*d*e (Zensiert, aber ich denk, ihr wisst, wen ich mein) auch so schnell wären.

Ach ja, Sunny heißt jetzt Ynnus, nicht Yannus. Schau dir die beiden Namen mal genau an :D

Ynnus
05.08.2005, 00:02
Schön dass der Typ gleich gebannt wurde. Aber zu dem Thread kann ich leider nichts sagen, so schlau wie mein Double, der ja scheinbar die Lösung hatte, bin ich da nicht . :D

Rolus
05.08.2005, 12:58
Du musst den Pointer per Nerd_Get() auf die Zeile 569 lenken!
Tz, denk doch mal nach Junge. Das gäbe doch voll den Overflow auf dem Kiddie-Heap. Da würde nur noch ein Aufruf der Modmethode über die Nerdpointer helfen, was wohl den Konstruktor der Bannklasse aufrufen würde (über *pAdmin) oder eventuell sogar den multitalking Thread beenden würde. Und dann könntest du nur noch als Zombieprozess durch's Forum geistern .. ;)

freundliche Grüße, Rolus

BeyondTheTruth
05.08.2005, 18:30
:eek: Du kennst dich aber gut aus. Machst du das professionell??

Rolus
09.08.2005, 14:17
:eek: Du kennst dich aber gut aus. Machst du das professionell??
Nein. ;)
Aber so eine Seite wäre wirklich nicht schlecht. Da scheint es doch Mangel zu geben. Wenn man mit Google nach 'Assembler' und 'EOF' auf deutschen Seiten sucht, ist dieser Thread schon auf der ersten Seite. Und für 'Assembler', 'Linux' und 'fork' auch. Gut, auf diesem Forum sind rund um die Uhr Google-Bots online, aber trotzdem sollte es nicht so schwer sein, mit einer Linux Assembler Seite gute Ergebnisse zu erzielen. :)

freundliche Grüße, Rolus

SSJ7Gohan
10.08.2005, 18:35
Die POSIX Spezifikation beschreibt alle Funktionsaufrufe, die ein unix Betriebssystem bereitstellen muss. Jedoch variirt die Implementation der Funktionen zwischen den Systemen, unter Linux verwendest du also evt. einen anderen Interrupt als in FreeBSD usw.

Welche Funktionsnummer du in EAX übergeben musst usw. steht in den Linux Headerfiles.
Die POSIX Spezifikation findest du hier: http://www.unix.org/single_unix_specification/