2016-05-31 27 views
0

Ich versuche, einige der Argumente zu ändern, die an meine Assembly-Funktion in C-Programm übergeben. Ich habe es schon in x86 Assembly versucht, aber in x64 scheint es nicht mehr zu funktionieren.Intel x64 Assembly-Funktion aus C-Programm aufgerufen, wie Argumente mit Verweis übergeben

section .text 
global f 
f: 
    push rbp 
    mov rbp, rsp 
    ;[rbp+8] bitmap beginning address (unsigned*) ? 
    ;[rbp+12] bitmap width (int*) ? 
    ;[rbp+16] bitmap height (int*) ? 
    ;[rbp+20] current X pos (double*) ? 
    ;[rbp+24] current Y pos (double*) ? 

    mov rax, [rbp+12] 

    mov rcx, [rax] 
    inc rcx 
    mov [rax], rcx 

    mov rsp, rbp 
    pop rbp 
    ret 
+3

x86_64 Parameter unterschiedliche Aufrufkonventionen als x86 – technosaurus

+1

x86-64 verwendet Register (und wenn nötig den Stapel) passieren hat. Sehen Sie müssen sich die [64-Bit-System-ABI] (http://www.x86-64.org/documentation/abi.pdf) für die Aufrufkonvention ansehen. –

+2

Nun, diese Offsets sehen nicht sehr '64-Bit 'zu mir :( –

Antwort

1

Die Art und Weise Argumente an eine Funktion in C übergeben werden, hängt von den Aufrufkonvention.

Hier verwenden Sie die Art, wie Sie Argumente ändern, die x86-Aufrufkonvention-Eigenschaften (Argumente werden über den Stapel übergeben). In x86_64 ist die Aufrufkonvention jedoch anders (und kann sich je nach Compiler unterscheiden). Argumente werden im Allgemeinen über Register übergeben, so dass das Ändern des Stapels keine Argumente verändert.

können Sie die list of x86 calling convention on Wikipedia

+0

Er versucht nicht wirklich, die Funktion args zu ändern, sie sind Zeiger, die er deneferenziert. Die Frage ist nur schlecht betitelt, und sollte "durch Verweis" oder etwas sein. Er versucht, einen Zeiger zu laden Rax') und modifiziere die Daten, auf die es zeigt. –