Welche Register können in einer Funktion sicher verwendet werden (x86)

8

Laut Wikipedia erlaubt der Intel ABI die Verwendung von EAX , ECX und EDX , ohne sie zu schützen sie in einer Funktion.
Ich bin mir nicht sicher, was "Intel ABI" bedeutet. Bedeutet dies, dass es von allen Compilern, die auf Intel-CPUs abzielen, erzwungen / befolgt wird? Ich schreibe eine Assembly-Funktion, die aus C-Code aufgerufen wird. Kann ich das für alle Compiler annehmen? (Ich ziele nur auf x86 im Moment)

    
baruch 05.02.2013, 06:37
quelle

2 Antworten

6

Der Intel ABI ist nur eine von Intel etablierte Calling Convention.

Im Allgemeinen wird die Art und Weise, wie Parameter übergeben werden und welche Register während eines Funktionsaufrufs gespeichert oder gelöscht werden, durch die Aufrufkonvention der Funktion definiert:

Ссылка

Insbesondere sollten Sie für __cdecl, __stdcall und __fastcall erwarten, dass EAX, ECX und EDX verworfen werden, und Ihre Funktion sollte andere Register beibehalten und auf EAX (oder EDX: EAX für 64-Bit-Returns) zurückgeben.

Wenn Sie nicht wissen, was die Aufrufkonvention ist, die Sie verwenden sollten, sollten Sie nicht in der Assembly schreiben, da das Durcheinander der Aufrufkonvention zu ausnutzbaren Fehlern in Ihrer Anwendung führen kann.

In C ist die Standard-Aufrufkonvention normalerweise __cdecl und für Windows-exportierte APIs normalerweise __stdcall.

    
SecurityMatt 05.02.2013, 06:48
quelle
1

Es ist die Intel Application Binary Interface, eine Reihe von Regeln, die diktieren, welche Register für die Verwendung ohne Speichern verfügbar sind, wie Argumente auf den Stapel geschoben werden, ob Aufrufer oder Aufgerufener die Stack-Frames aufräumt und so weiter.

>

Wenn Sie wissen, dass die Regeln befolgt werden, ist das in Ordnung. Ich neige dazu, alles nur für den Fall zu speichern (abgesehen von den Dingen, die ich für die Rücksendung von Informationen nutze).

Aber es ist nicht unbedingt für alle Compiler erzwungen und Sie wären unklug, dies zu denken, es sei denn, der Compiler gibt dies ausdrücklich an.

    
paxdiablo 05.02.2013 06:43
quelle

Tags und Links