分析 system_call 中断处理过程
使用 gdb 跟踪分析一个系统调用内核函数(上周选择的那一个系统调用),系统调用列表参见 torvalds/linux。推荐在实验楼 Linux 虚拟机环境下完成实验。
实验过程
打开menu
文件夹中的test.c
,加入系统调用的两个函数,代码如下:
int rename_2808(){
int ret;
char oldname[ ] = "hello.c";
char newname[ ] = "newhello.c";
ret = rename(oldname, newname);
if(!ret)
printf("Renamed successfully!\n");
else
printf("Unable to rename the file!\n");
return 0;
}
int rename_asm(){
int ret;
char *oldname = "hello.c";
char *newname = "newhello.c";
asm volatile(
"movl %2,%%ecx\n\t"
"movl %1,%%ebx\n\t"
"movl $0x26,%%eax\n\t"
"int $0x80"
: "=a"(ret)
: "b"(oldname), "c"(newname)
);
if(ret == 0)
printf("Renamed successfully!\n");
else
printf("Unable to rename the file!\n");
return 0;
}
main.c
MenuConfig("rename_2808","Modify the file",rename_2808);
MenuConfig("rename_asm","Modify the file",rename_asm);
启动menuos
gdb
调试
sys_rename
处打断点