Ergebnis 1 bis 10 von 10

Thema: [ASM] Linux

  1. #1

    [ASM] Linux

    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:

    Zitat Zitat von Linux T. Just for Fun S. 62-63

    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...

    Code:
    ;###################################;
    ;# 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)

  2. #2
    Zitat Zitat von Crash-Override
    Das sich Linux erstaunlich gut (besser als Windows) über Assembler programmieren lässt durfte ich herausfinden.
    Ansichtssache.
    Zitat Zitat von Crash-Override
    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 durchlesen. Normalerweise sucht man sich aber die Calls zusammen, die man braucht und nicht umgekehrt.
    Zitat Zitat von Crash-Override
    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 ..
    Zitat Zitat von Crash-Override
    Code:
    ;###################################;
    ;# 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

  3. #3
    Du musst den Pointer per Nerd_Get() auf die Zeile 569 lenken!

  4. #4
    Zitat Zitat von Sunny3k
    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)

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

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

  5. #5
    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

  6. #6
    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 .

  7. #7
    Zitat Zitat von Sunny3k
    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

  8. #8

    Users Awaiting Email Confirmation

    Du kennst dich aber gut aus. Machst du das professionell??

  9. #9
    Zitat Zitat von BeyondTheTruth
    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

  10. #10
    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/

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •