Autor Thema: ABI - Binärschnittstelle  (Gelesen 3253 mal)

sebi2020

  • Beiträge: 130
    • Profil anzeigen
    • Infortus OS
Gespeichert
« am: 15. November 2009, 13:52 »
Hallo, ich hoffe das gehört in dieses Topic, bin mir nicht ganz sicher.
Weiß jemand, was eine Binärschnittstelle ist, also praktisch ist, wenn man sie umsetzt. ich habe mir einen Artikel auf Wikipedia durchgelesen, aber verstehen tu ich den nicht. http://de.wikipedia.org/wiki/Bin%C3%A4rschnittstelle

mfg Sebi
Please press any-key...
Verflucht wo ist any-key? hier? ach Mist, das war Escape...

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 15. November 2009, 14:24 »
Wenn man von einer ABI redet, dann normal in Abgrenzung zur API. In diesem Kontext bezieht sich dann die API auf den Quellcode und die ABI auf bereits kompilierten Binärcode. Interessant ist das vor allem in Sachen Kompatibilität, also die Frage, welche von beiden stabil bleibt (wenn sie sich verändert, funktionieren alte Programme logischerweise nicht mehr).

Nehmen wir mal ein Beispiel. Du hast einen Kernel, der einen Syscall Nummer 3 anbietet, um ein Zeichen auszugeben, das in eax übergeben wird (das ist die ABI). Du hast außerdem eine libc, die eine Funktion sys_print_char(int c) anbietet (das ist die API). Wenn du die Funktion jetzt in sys_putc umbenennst, änderst du die API. Programme müssen also geändert werden, wenn man sie mit der neuen Version kompilieren möchte. Bereits kompilierte alte Anwendungen funktionieren aber noch, weil sie eben den Code enthalten, um Syscall Nummer 3 aufzurufen.

Umgekehrt, wenn du entscheidest, dass 42 eigentlich eine viel bessere Nummer wäre, aber du lässt den Namen gleich, dann änderst du die ABI und die API bleibt stabil (weil die libc natürlich auch auf die neue Nummer geändert wird). Alte Programme laufen dann erst einmal nicht mehr, aber du kannst sie einfach unverändert neu kompilieren und dann tun sie wieder.

Das ganze funktioniert natürlich nicht nur mit Syscallnummern und Funktionsnamen, sondern auch, wenn die Funktion einen Pointer als Parameter nimmt, der auf eine Struktur zeigt, die ein neues Feld bekommen hat. Oder auf eine andere Struktur zeigt, die wiederum eine Änderung hat. Deswegen ist es manchmal gar nicht so einfach zu sehen, ob die ABI jetzt unverändert geblieben ist oder nicht.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

sebi2020

  • Beiträge: 130
    • Profil anzeigen
    • Infortus OS
Gespeichert
« Antwort #2 am: 15. November 2009, 14:37 »
Ah okay, jetzt versteh ich das.
Danke
Please press any-key...
Verflucht wo ist any-key? hier? ach Mist, das war Escape...

 

Einloggen