を使用してパラメータとしてのレジスタを持つ関数を呼び出すI持って、次のARMアセンブリコード:ARMアセンブリC
mov r0, SP
mov r1, LR
bl func
Cコードを使用して関数funcを呼び出す方法はありますか?何かのようにfunc(SP, LR)
ありがとう!
を使用してパラメータとしてのレジスタを持つ関数を呼び出すI持って、次のARMアセンブリコード:ARMアセンブリC
mov r0, SP
mov r1, LR
bl func
Cコードを使用して関数funcを呼び出す方法はありますか?何かのようにfunc(SP, LR)
ありがとう!
正確に何をしたいか、どのコンパイラを使用するかによって異なります。このような何かが、仕事ができるgcc
で :
extern void func(void*, void*);
void foo()
{
int dummy[4];
func(&dummy, __builtin_return_address(0));
}
これは、常にしかし、あなたの正確なスタックポインタを与えていない可能性があります。変数にLR
とSP
を配置する
foo():
push {lr}
sub sp, sp, #20
mov r1, lr
mov r0, sp
bl func(void*, void*)
add sp, sp, #20
ldr pc, [sp], #4
使用出力レジスタ:godboltあたりとして、それは次のアセンブリコード生成
void *lr, *sp;
asm ("mov %0, sp" : "=r" (sp));
asm ("mov %0, lr" : "=r" (lr));
func(lr, sp);
確かに。あなたはCの構文を使用する場合は、実際にアセンブリコードを記述する際にポイントを参照してくださいしないでください。私はあなたが 'invoke func、sp、lr'のようなものを書くことを可能にするMASMの' invoke'マクロに似たマクロを書くことができると思います – Michael