Después de ingresar _start, ¿está alineado rsp?

Resuelto asked hace 8 años • 1 respuestas

Cuando los programas ingresan a la _startrutina al inicio del programa, ¿el puntero de la pila está alineado con un límite de 16 bytes o debe alinearse manualmente? Quiero decir, ¿está alineado incluso antes del prólogo ( push rbp; mov rbp, rsp) en _start?

Sé que en x86-64 al inicio del programa RSPestá alineado a 8 bytes, pero ahora sé si está alineado a 16 bytes. Para algunas tareas, es posible que necesite esa alineación para ejecutar correctamente las instrucciones SSE que requieren alineación en un límite de 16 bytes.

 avatar Aug 31 '16 01:08
Aceptado

La ABI x86-64 dice explícitamente (3.4.1 Estado de registro y pila inicial):

%rspEl puntero de la pila contiene la dirección del byte con la dirección más baja que forma parte de la pila. Se garantiza que estará alineado con 16 bytes en la entrada del proceso.

Dado que _startes el primer símbolo que se llama cuando se ingresa un proceso, puede estar completamente seguro de que está alineado en 16 bytes cuando el sistema operativo llama _starta su ejecutable.

Daniel Kamil Kozar avatar Aug 30 '2016 21:08 Daniel Kamil Kozar