Cのメイン関数からアセンブリ関数に引数を渡すにはどうすればよいですか?カスタム関数は次のようになっている必要があります。
void function(char *somedata) __attribute__((cdecl));
somedata
では、アセンブリファイルでどのように使用しますか。私のオペレーティングシステムはLinuxUbuntuで、プロセッサはx86です。
私はこれについては少し初心者ですが、うまくいけば、この例があなたをあなたの道に連れて行くでしょう。私はそれをテストしました、そしてそれは働きます、あなたが持っているかもしれない唯一の問題はソフトウェアが利用できないことです。アセンブリにnasmを使用しています。
extern void myFunc(char * somedata);
void main(){
myFunc("Hello World");
}
section .text
global myFunc
extern printf
myFunc:
push ebp
mov ebp, esp
push dword [ebp+8]
call printf
mov esp, ebp
pop ebp
ret
nasm -f elf myFunc.asm
gcc main.c myFunc.o -o main
nasm(アセンブラー)をインストールする必要があります(ubuntuは:sudo apt-get install nasm)
基本的にcコードで発生することは、メッセージを使用してmyFuncを呼び出します。myFunc.asmで、文字列の最初の文字のアドレスを取得します([ebp + 8]にあります。詳細については、こちらを参照してください(http://www.nasm.us/xdoc/2.09.04/html/nasmdoc9.html c呼び出し規約について説明している9.1.2を参照してください。)そして、それをprintf関数に渡します(スタックにプッシュします)。printfはc標準ライブラリにあり、gccはデフォルトでコードに自動的にリンクします。に。
アセンブリファイルでmyFuncをエクスポートし、main.cファイルでmyFuncを外部関数として宣言する必要があります。myFunc.asmでは、stdlibからprintf関数もインポートして、メッセージをできるだけ簡単に出力できるようにしています。
これがいくらか役立つことを願っています。