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?