Creo que lo que realmente está preguntando es calling convention, que describe cómo las subrutinas en un programa pasan información entre sí, y cómo el sistema operativo pasa información al programa y, en general, qué significan los diferentes registros .
Por ejemplo, el cdecl calling convention on the x86, que es utilizado por la mayoría de los compiladores de C, dice que cuando una función retorna, el valor de retorno va en el registro eax. Entonces, si tiene una función int foo()
, sabe que después de foo
ejecuta su código de operación ret
, eax contendrá ese int que foo
devolvió.
Por el contrario, el procesador PowerPC (generalmente) tiene (al menos) 32 registros, simplemente denominados r0, r1, ... r31. The AIX calling convention para este chip dice que el puntero de pila pasa a r1, que los parámetros de función pasan de r3 a r11, que los valores de retorno vuelven a r3, y así sucesivamente.
Es importante recordar que una convención de llamadas es una especie de acuerdo entre las funciones de un programa o entre bibliotecas. No es parte del hardware o una ley, y generalmente hay muchas convenciones de llamadas diferentes que se pueden usar en una plataforma. Es por esto que a veces se verá un código como
struct CFoo { void __stdcall method(); };
Eso es una instrucción para MSVC, que por lo general le gusta usar la convención fastcall, diciéndole que la utilice una convención diferente para que una función. Esto es importante si por ejemplo la función está definida en una biblioteca que fue construida por algún otro compilador que usa stdcall en su lugar.
Cuando hablamos de cómo el sistema operativo pasa información a un programa (o el hardware al sistema operativo), generalmente lo llamamos ABI en lugar de una convención de llamadas, pero es la misma idea. Entonces, en el caso de su programa, fue escrito asumiendo que el sistema operativo le pasaría alguna información particular sobre eax. Esa suposición sería particular para el sistema operativo, el compilador y posiblemente incluso para el programa individual.
No 'is', pero' are'. – leppie
Si proporciona información sobre su plataforma (sistema operativo, formato ejecutable) estoy seguro de que alguien puede decirle qué 'eax' está configurado en el punto de entrada del programa. – Edmund
Editado, gracias por la sugerencia. –