0

アセンブリで記述された並べ替えプログラムに配列を渡そうとしています。私がこれまでに持っているコードは次のとおりです。

main.c:

#include <stdio.h>

extern void myFunc(int * somedata);

int arr[5] = { 3, 2, 33, 11, 1};

void main(){
    int i;
    myFunc(arr);
    for(i = 0; i < 5; i++)
    {
    //      printf( "%d\n", arr[i] );
    }
}

myFunc.asm:

セクション .text グローバル myFunc extern printf

    myFunc:
            enter   4,0
            push    ebx

            push    dword [ebp + 8]
            call    printf

            pop     ebx
            leave
            ret

これは、これを行う方法を学ぶための単なるテスト コードです。

私の理解では、これは配列へのポインターを出力するはずですが、おそらく間違っています。

配列をアセンブリ ファイル (NASM) に渡す簡単な例を教えてください。

ありがとうございました!

4

2 に答える 2

2

printf最初の引数がに渡されたポインタである状態で呼び出していますmyFunc。それは機能しません-最初の引数はフォーマット文字列でなければなりません。

ただし、残りのコードは問題ないように見えます。配列の長さもasm関数に渡す必要があることに注意してください。

于 2013-03-10T04:24:59.537 に答える
2

このような質問に答える最善の方法は、関心のある操作のタイプを実行する短い関数を C で作成し、それをアセンブリにコンパイルしてリバース エンジニアリングを行うことです。

于 2013-03-10T15:26:04.317 に答える