12 Stimmen

Linux 64-Befehlszeilenparameter in Assembly

Diese Beschreibung ist gültig für Linux 32 bit: Wenn ein Linux-Programm beginnt, werden alle Zeiger auf Befehlszeilenargumente auf dem Stack gespeichert. Die Anzahl der Argumente wird bei 0(%ebp) gespeichert, der Name des Programms bei 4(%ebp), und die Argumente werden ab 8(%ebp) gespeichert.

Ich benötige die gleichen Informationen für 64 Bit.

Bearbeiten: Ich habe ein funktionierendes Code-Beispiel, das zeigt, wie man argc, argv[0] und argv[1] verwendet: http://cubbi.com/fibonacci/asm.html

.globl \_start
\_start:
    popq    %rcx        # this is argc, must be 2 for one argument
    cmpq    $2,%rcx
    jne     usage\_exit
    addq    $8,%rsp     # skip argv\[0\]
    popq    %rsi        # get argv\[1\]
    call ...
...
}

Es sieht so aus, als befänden sich Parameter auf dem Stack. Da dieser Code nicht klar ist, stelle ich diese Frage. Ich vermute, dass ich rsp in rbp aufbewahren kann und dann auf diese Parameter mit 0(%rbp), 8(%rbp), 16(%rbp) usw. zugreifen kann. Ist dies korrekt?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X