Ho una funzione con la firma:Recuperare argomenti di una procedura di assemblaggio x64 MASM
extern "C" int foo(int a, int b, int c, int d, int e);
che è in realtà scritto in assembly.
Con ml (32 bit), utilizzando convenzione di chiamata standard che si può tranquillamente scrivere
.code
foo PROC a: DWORD, b: DWORD ,c: DWORD, d: DWORD, e: DWORD
mov eax, d
mov ebx, e
e iniziare a utilizzare le etichette per accedere ai argomenti
Con ml64 (64 bit) la fastcall è il unica convenzione disponibile. Non ho problemi ad accedere primi argomenti memorizzati nei registri, ma problemi per accedere quelli nella pila (e
in questo esempio): Ho provato
.code
foo PROC a: DWORD, b: DWORD ,c: DWORD, d: DWORD, e: DWORD
e
.code
foo PROC e: DWORD
ma il valore in e
è spazzatura.
Ho scoperto che se utilizzo direttamente l'indirizzo di stack, trovo il valore.
.code
foo PROC e: DWORD
mov eax, r9 ; d
mov ebx, DWORD PTR[rbp + 48] ; e
C'è un altro modo?