Anzeige:
Ergebnis 1 bis 4 von 4

Thema: reg's Sicherung in ASMB-Funktionen die aus C gerufen werden

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.04.2003
    Ort
    STUTTGART
    Beiträge
    27

    reg's Sicherung in ASMB-Funktionen die aus C gerufen werden

    offenbar sichert calloc zumindest die Register si,di,cx nicht und hinterläßt sie verändert.
    Ist
    es allgemein so, daß der C-Compiler nicht, nach Aufruf einer Funktion,
    unveränderte RegWerte erwartet?

    Braucht also eine manuell in Assembler codierte Funktion RegInhalte nicht sichern
    und vor Rückkehr wiederherstellen?

  2. #2
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Die Konvention für x86-32 ist dass der Aufrufer einer Funktion (der "caller") die Inhalte der Register %eax, %ecx, und %edx irgendwo zwischenspeichern muss (die sog. "caller-save" Register). Hingegen ist die aufgerufene Funktion (der "callee") dafür verantwortlich die Inhalte der Register %ebx, %esi, und %edi (die sog. "callee-save" register) beim return wieder so herzustellen wie sie am Anfang der Funktion waren.
    Zusätzlich ist nach dem Funktionsaufruf in %eax der Return-Wert der Funktion.

    Beispiel:
    Code:
    // im caller, die werte in %eax, %ecx, und %edx 
    // werden nach dem Funktionsaufruf weiterhin gebraucht.
    push %eax
    push %ecx
    push %edx
    call fun
    // hier ist %eax der Returnwert der aufgerufenen Funktion
    pop %edx
    pop %ecx
    pop %eax
    
    fun: // braucht alle register
    // setup
    push %ebp
    mov %esp %ebp
    // backup callee-saves
    push %ebx
    push %edi
    push % esi
    
    ....
    
    // restore callee-saves
    pop %esi
    pop %edi
    pop %ebx
    // return 0
    mov %eax, $0
    // cleanup stack and return
    leave
    ret
    Siehe auch: http://www.cs.virginia.edu/~evans/cs...6.html#calling

    edit: für x86_64
    System V: http://www.x86-64.org/documentation/abi.pdf
    Windows: http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx
    Geändert von jeebee (14-03-2012 um 17:44 Uhr)
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.04.2003
    Ort
    STUTTGART
    Beiträge
    27
    Danke, vorallem auch für die Links

  4. #4
    Registrierter Benutzer
    Registriert seit
    05.04.2003
    Ort
    STUTTGART
    Beiträge
    27
    ich habe damals http://www.x86-64.org/documentation/abi.pdf heruntergeladen,
    jetz
    möchte ich aber andere vielleicht darauf verweisen,
    aber klick auf den Link meldet auch nach vielen Versuchen

    Der Server unter www.x86-64.org braucht zu lange, um eine Antwort zu senden.

    Ist die Doku nun vielleicht anderswo?

Stichworte

Lesezeichen

Berechtigungen

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