2016-05-31 10 views
0

Cプログラムでアセンブリ関数に渡された引数の一部を修正しようとしました。 私はすでにx86アセンブリで試してみましたが、x64ではそれ以上は動作しません。引数がC関数に渡されインテルx64アセンブリ関数がCプログラムから呼び出されました参照で渡された引数を変更する方法

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版が – technosaurus

+1

x86-64では、レジスタを使用してのx86とは異なる呼び出し規約を持って見ることができます。呼び出し規約については、[64ビットSystem V ABI](http://www.x86-64.org/documentation/abi.pdf)を参照する必要があります。 –

+2

さて、これらのオフセットは私にとっては「64ビット」には見えません:( –

答えて

1

方法は呼び出し規約に依存します。

ここで、引数を変更する方法は、x86呼び出し規約プロパティを使用します(引数はスタック経由で渡されます)。しかし、x86_64では、呼び出し規約が異なります(コンパイラーによって異なる場合があります)。引数は一般にレジスタを介して渡されるため、スタックを変更しても引数は変更されません。パラメータを渡す(スタックを必要であればと)

あなたがlist of x86 calling convention on Wikipedia

+0

彼は実際に関数の引数を変更しようとしていない、彼らは間接参照しているポインタです。質問はちょうど悪いタイトルであり、 "参照渡し"または何かをする必要があります。 rax')、それが指すデータを変更します。 –

関連する問題