x86_64 寄存器传参方式
·1min·李岩
x86_64 架构下,寄存器传参时,仅 arg1-arg6 会通过寄存器进行,arg7+ 的参数,将会放到栈上进行。
验证代码
# 环境
├── arg.bt
├── arg_test
└── hello.c
// hello.c, gcc -o arg_test hello.c
#include <stdio.h>
#include <stdlib.h>
void print_arg(int arg1, int arg2, int arg3, int arg4, int arg5, int arg6,
int arg7, int arg8){
printf("%d, %d, %d, %d, %d, %d, %d, %d
", arg1, arg2, arg3, arg4, arg5,
arg6, arg7, arg8);
return;
}
int main(){
print_arg(1,2,3,4,5,6,7,8);
}
// arg.bt
#!/bin/bpftrace
uprobe:./arg_test:print_arg
{
printf("== enter print_arg
");
printf("arg1: %d
", arg0);
printf("arg2: %d
", arg1);
printf("arg3: %d
", arg2);
printf("arg4: %d
", arg3);
printf("arg5: %d
", arg4);
printf("arg6: %d
", arg5);
printf("arg7: %d
", sarg0);
printf("arg8: %d
", sarg1);
}
执行结果
sudo bpftrace arg.bt
Attaching 1 probe...
== enter print_arg
arg1: 1
arg2: 2
arg3: 3
arg4: 4
arg5: 5
arg6: 6
arg7: 7
arg8: 8
./arg_test