一、使用库函数 API 和 C 代码中嵌入汇编代码两种方式使用同一个系统调用
getpid 函数:用来取得目前进程的进程ID
汇编语言代码如下:
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid;
asm volatile (
"mov $39, %%rax\n" // syscall number 39 for getpid
"syscall\n"
: "=a" (pid) // output: the return value is stored in pid
:
: "rcx", "r11" // clobbered registers
);
printf("Process ID: %d\n", pid);
return 0;
}
- 使用
mov $39, %%rax
将系统调用号39(getpid
)加载到RAX寄存器中。 - 使用
syscall
触发系统调用。 - 输出值(
pid
)通过"=a"
表示,表示RAX寄存器的值会被存储在pid
变量中。 - 我们还使用
: "rcx", "r11"
来指示内联汇编会修改这两个寄存器的内容。 - 我们打印出获取到的进程ID。
直接调用及编译实现如下:
附:chatGPT辅助学习
1、
2、