Penso che quello che stai veramente chiedendo sia calling convention, che descrive come le subroutine in un programma passano le informazioni l'una all'altra, e come il sistema operativo trasmette le informazioni al programma, e in generale cosa si intende che i diversi registri significano .
Ad esempio, lo cdecl calling convention on the x86, che viene utilizzato dalla maggior parte dei compilatori C, dice che quando una funzione ritorna, il valore del valore di ritorno va sul registro eax. Quindi, se hai una funzione int foo()
, sai che dopo foo
esegue il suo codice operativo ret
, eax conterrà quella int restituita da foo
.
Al contrario, il processore PowerPC (di solito) ha (almeno) 32 registri, semplicemente chiamati r0, r1, ... r31. The AIX calling convention per questo chip dice che il puntatore dello stack va su r1, che i parametri di funzione vengono passati da r3 a r11, che i valori di ritorno ritorna su r3 e così via.
È importante ricordare che una convenzione di chiamata è un po 'come un accordo tra le funzioni di un programma o tra le librerie. Non fa parte dell'hardware o di una legge e di solito esistono molte convenzioni di chiamata diverse che possono essere utilizzate su una piattaforma. Questo è il motivo per cui a volte si vedrà il codice come
struct CFoo { void __stdcall method(); };
Questo è un'istruzione per MSVC, che di solito ama usare la convenzione fastcall, dicendogli di utilizzare una convenzione diversa per quella funzione. Questo è importante se , ad esempio, la funzione è definita in una libreria creata da un altro compilatore che utilizza invece stdcall.
Quando parliamo di come il sistema operativo trasmette le informazioni a un programma (o l'hardware al sistema operativo), di solito lo chiamiamo un ABI invece di una convenzione di chiamata, ma è la stessa idea. Quindi, nel caso del tuo programma, è stato scritto assumendo che il sistema operativo avrebbe passato alcune informazioni particolari su eax. Tale ipotesi sarebbe particolare per il sistema operativo, il compilatore e, eventualmente, anche per il singolo programma.
Non 'is', ma' are'. – leppie
Se fornisci alcune informazioni sulla tua piattaforma (sistema operativo, formato eseguibile) sono sicuro che qualcuno può dirti a cosa è impostato "eax" al punto di ingresso del programma. – Edmund
Modificato, grazie per il suggerimento. –