Ich arbeite an einem kleinen Compiler-Projekt, und ich kann nicht herausfinden, wie die Adresse eines Stack-Speicherortes anstelle des Werts auf diesem Stapel verschoben werden Lage. Mein Ziel ist es, eine Stapelspeicheradresse, die einen ganzzahligen Wert enthält, als void-Zeiger auf eine C-Funktion zu setzen, die sie druckt. Mein oberstes Ziel ist es, eine Zeiger-Ganzzahl-Arithmetik in der Funktion auszuführen. Ich bin erfolgreich beim Aufrufen der C-Funktion von einer Laufzeitbibliothek Erweiterung, aber das Problem ist nur herauszufinden, wie die Adresse in Assembly schieben.Push-Adresse des Stack-Speicherortes anstelle des Werts an der Adresse
Meine C-Funktion.
void print(void* ptr){
int* int_ptr = (int*)ptr;
printf("*int_ptr is %d\n",*int_ptr);
}
Meine Assembly
.globl main
main:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl $42, %eax
movl %eax, -4(%ebp)
pushl -4(%ebp)
//Instead of the value at -4(%ebp), I would like the address of -4(%ebp)
call print
addl $8, %esp
leave
ret
Als für das, was ich jetzt haben, wird es zum Absturz bringen, da ich den Wert Casting bin 42
an eine Adresse. Kann mir jemand bitte eine Referenz oder Ressourcen nennen, um mehr zu erfahren?
@MichaelPetch Wow! Ich kann nicht glauben, dass es so einfach war. Ich danke dir sehr! – Miket25