私はCプログラムからasm関数を呼び出し、別のC関数を呼び出して新しいパラメータを渡そうとしますが、2番目の関数はasmのパラメータを受け取りました。ここに3つのファイルがあります。Cの呼び出しからASMのパラメータを取得する
main.cの
#include <stdio.h>
#include <stdlib.h>
#include "ac.h"
int main (int argc,char **argv)
{
char * s = _pusher(115,9);
fprintf(stdout,"From pusher '%s'\n",s);
free(s);
return EXIT_SUCESS;
}
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include "ac.h"
char * _aff(int a,int b)
{
char * s;
fprintf(stdout,"In aff(%d,%d)\n",a,b);
asprintf(&s,"v = %d - %d",a,b);
return s;
}
ac.cファイル
ファイルaa.asm
[CPU x64]
[BITS 64]
extern _aff
global _pusher
[SECTION .text]
_pusher:
push rbp
mov rbp,rsp
push 123 ;seems no effect
push 321 ;seems no effect
call _aff
add rsp,24
mov rsp,rbp
pop rbp
ret
[SECTION .data]
[SECTION .bss]
私が実行すると、私はこの出力を得る:
In aff(115,9)
From pusher : 'v = 115 - 9'
しかし、私は私自身の新しいパラメータを渡すにはどうすればよい
In aff(123,321)
From pusher : 'v = 123 - 321'
を期待していましたか? OPは、彼が彼のアセンブリ言語関数に渡したパラメータが処理されていなかったことに気づい
_aff(char *param,...) and use VA_LIST inside so pusher should be call like this
_pusher(int count,char **tbl)
読みますあなたのプラットフォームのABIと期待通りに引数を渡します。 – Olaf
奇妙なことは、メインから送信されるそれらのパラメータが_affに向かっているということです。私はmov rbp、rspは私の新しいスタックを作ったと思った – lilington
あなたはすでに質問で明らかにしたことを繰り返さないでください。コメントを理解できない場合は、「ABI」を検索してください。 – Olaf