[asm] div. fragen zu syscalls und fehlerbehandlung
-
hallo,
unter linux gibt es syscalls, kennt jemand eine gute und ausführlich beschriebene liste dazu (außer in den kernelsourcen, unistd.h)?
außerdem möchte ich wissen, wie man die fehlerabfrage eines syscalls behandelt. wie ist eax gesetzt, wenn bspw. eine aktion schief geht? wie kann ich fehler aka EAGAIN, EINT, ... erkennen? diese sind als ganzzahlige ausdrücke definiert, in einigen tutorials hab ich dann aber gelesen, man solle auf -<nr> vergleichen, als bspw. -2 statt 2.
gibt es eine garantie dafür, dass einige register bei einem syscall unverändert bleiben?
und dann ist da noch der stack ... irgendwie habe ich da noch einige fragen bzgl. der adressierung. nehmen wir an ich möchte eine einfache ausgabe auf den bildschirm bringen, der code wäre folgendermov eax, 4 mov ebx, 1 sub esp, 5 ;lücke mov ecx, esp mov edx, 5 int 80h
wie müsste jetzt ";lücke" aussehen, wenn ich in den stack "hallo" schreiben möchte? mich macht dieses mov eax, [esp+4], mov eax, [esp-4], lea eax, [esp+4], lea eax, [esp-4] total konfuss, ich komme mit dem + und - durcheinander und mit dem mov und lea ...
ich weiß dass es für die lösung dieses problem einen anderen weg gibt, aber es kommt mir nicht auf die lösung sondern auf den lösungsweg an ... das verständnis halt ...
thx
-
HAR schrieb:
unter linux gibt es syscalls, kennt jemand eine gute und ausführlich beschriebene liste dazu (außer in den kernelsourcen, unistd.h)?
Nun ich wüsste nich was Du ausser der unistd.h mit dem syscallnummern und
den manpages (zB: man 2 write) brauchstHAR schrieb:
gibt es eine garantie dafür, dass einige register bei einem syscall unverändert bleiben?
ehrlich gesagt KA. Diese Frage ist eher im Assembler-Topic zu stellen.
HAR schrieb:
und dann ist da noch der stack ... irgendwie habe ich da noch einige fragen bzgl. der adressierung. nehmen wir an ich möchte eine einfache ausgabe auf den bildschirm bringen, der code wäre folgender
mov eax, 4 mov ebx, 1 sub esp, 5 ;lücke mov ecx, esp mov edx, 5 int 80h
wie müsste jetzt ";lücke" aussehen, wenn ich in den stack "hallo" schreiben möchte? mich macht dieses mov eax, [esp+4], mov eax, [esp-4], lea eax, [esp+4], lea eax, [esp-4] total konfuss, ich komme mit dem + und - durcheinander und mit dem mov und lea ...
Nun da ich auch kein ASM-guru bin würd mich das auch mal interessieren.
Da der stack aber in Richtung absteigender addressen wächst wäre da
sub esp, 5 wohl nicht verkehrt. man könnte es aber auch mitlea ecx,[esp-5]
versuchen, oder irre ich mich da?
Andere Antworten würden mich hierzu auch interessieren.
Gruss
-
Mhm, ich dachte mir dies sei eher Linux spezifisch, aber wenn mir jemand den gefallen tuhen würde, dann möge er diesen Thread doch in den Assemblerbereich verschieben.
Thx
-
HAR schrieb:
wie kann ich fehler aka EAGAIN, EINT, ... erkennen? diese sind als ganzzahlige ausdrücke definiert, in einigen tutorials hab ich dann aber gelesen, man solle auf -<nr> vergleichen, als bspw. -2 statt 2.
Negative Werte sind fehler, positive sind normale rückgaben.
-
ok, und meine anderen fragen?