C main関数からアセンブリ関数に引数を渡すにはどうすればよいですか?今、私は、アセンブリファイルにsomedata
を使用する方法Cからアセンブリに引数を渡しますか?
void function(char *somedata) __attribute__((cdecl));
:私は私のカスタム関数のようなものを見て持っていることを知っています。私の操作システムはLinux Ubuntuで、私のプロセッサはx86です。
C main関数からアセンブリ関数に引数を渡すにはどうすればよいですか?今、私は、アセンブリファイルにsomedata
を使用する方法Cからアセンブリに引数を渡しますか?
void function(char *somedata) __attribute__((cdecl));
:私は私のカスタム関数のようなものを見て持っていることを知っています。私の操作システムはLinux Ubuntuで、私のプロセッサは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
(それをUbuntuのです:sudo apt-get install nasm)
基本的にCコードで何が起こるのかは、メッセージでmyFuncを呼び出します。 myFunc.asmでは、文字列の最初の文字のアドレスを取得します(これは[ebp + 8]にあります)。ここに情報があります(http://www.nasm.us/xdoc/2.09.04/html/nasmdoc9.html)。 printfはCの標準ライブラリにあり、gccはデフォルトで自動的に私たちのコードにリンクします。 to。
アセンブリファイルでmyFuncをエクスポートし、main.cファイルのextrnal関数としてmyFuncを宣言しなければなりません。myFunc.asmでは、stdlibからprintf関数をインポートします。できるだけ簡単に
これは多少役立ちます。
まさに私が探しているもの。 –
@jwwishartあなたは今1337の評判を得ました。もし誰かがあなたに投票したら、それは恥ずかしいでしょうか? ^^ – displayname