


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、深入理解系统调用找一个系统调用,系统调用号为学号最后2位相同的系统调用:本次实验选择84号系统调用:rmdir。该系统调用的作用是删除文件夹。#includeintrmdir(constchar*pathname);返回值:若成功则返回0,若出错则返回-1通过汇编指令触发该系统调用:首先使用c库函数触发rmdir系统调用:#include#includeintmain()intflag;char*dir=test;flag=rmdir(dir);if(flag=0)printf(“删除成功门“);elseprintf(删除失败门“);return0;通过反汇编发现通过%rdi传递参数,通过ea
2、x传递系统调用号:下面使用嵌入式汇编来代替libc提供的rmdir()函数,并触发rmdir系统调用:#include#includeintmain()intflag;char*dir=test;asmvolatile(movq%1,%rdintmovq$0 x54,%raxntsyscallntmovq%rax,%0nt:=m(flag):b(dir);if(flag=0)printf(Deletesucceededn);elseprintf(Deleteunsucceededn);return0;通过实验验证了改写成功,能够通过嵌入式汇编触发rmdir系统调用:通过gdb跟踪该系统调用的内
3、核处理过程:通过bt查看函数调用栈,结合课上所学知识和本次实验,绘制了两幅系统调用的宏观图:64位嵌入式汇编:32位libc提供的rmdir()函数:由于gdb无法追踪entry_SYSCALL_64处的汇编代码,因此我们只能把断点设在do_syscall_64()和_x64_sys_rmdir()函数处,通过以下调试代码可以看到:首先gdb跟踪到了do_syscall_64(nr=84,regs=0 xffffc90000033f58处,然后进入函数体内,在执行到regs-ax=sys_call_tablenr(regs)时,根据系统调用号和参数跳转到_x64_sys_rmdir()函数处,
4、执行完对应的内核处理函数后,依次返回到do_syscall_64函数中执行syscall_return_slowpath(regs),再返回到entry_SYSCALL_64中,在这段汇编的末尾,我们跟踪到了USERGS_SYSRET64这条语句,它相当于做了swapgs和sysretq,对应恢复现场和中断返回,接着继续执行用户态的代码。Breakpoint1,do_syscall_64(nr=84,regs=0 xffffc90000033f58)atarch/x86/entry/common.c:279279(gdb)lprepare_exit_to_usermode(regs);276#
5、ifdefCONFIG_X86_64_visiblevoiddo_syscall_64(unsignedlongnr,structpt_regs*regs)structthread_info*ti;281enter_from_user_mode();local_irq_enable();(gdb)nlocal_irq_enable();(gdb)nti=current_thread_info();(gdb)nif(READ_ONCE(ti-flags)&_TIF_WORK_SYSCALL_ENTRY)(gdb)nif(likely(nrax=sys_call_tablenr(regs);(gd
6、b)nBreakpoint2,_x64_sys_rmdir(regs=0 xffffc90000033f58)atfs/namei.c:39513951SYSCALL_DEFINE1(rmdir,constchar_user*,pathname)(gdb)ndo_rmdir(dfd=-100,pathname=0 x492164test)atfs/namei.c:38933893(gdb)n3900unsignedintlookup_flags=0;(gdb)n3893(gdb)n3902name=filename_parentat(dfd,getname(pathname),lookup_f
7、lags,(gdb)n3904if(IS_ERR(name)(gdb)n3902name=filename_parentat(dfd,getname(pathname),lookup_flags,(gdb)n3904if(IS_ERR(name)(gdb)n3907switch(type)(gdb)nerror=mnt_want_write(path.mnt);(gdb)nif(error)(gdb)ninode_lock_nested(path.dentry-d_inode,I_MUTEX_PARENT);(gdb)ndentry=_lookup_hash(&last,path.dentry
8、,lookup_flags);(gdb)n3926if(IS_ERR(dentry)(gdb)n3924dentry=_lookup_hash(&last,path.dentry,lookup_flags);(gdb)n3926if(IS_ERR(dentry)(gdb)n3928if(!dentry-d_inode)(gdb)n3935error=vfs_rmdir(path.dentry-d_inode,dentry);(gdb)n3937dput(dentry);(gdb)ninode_unlock(path.dentry-d_inode);(gdb)nmnt_drop_write(pa
9、th.mnt);(gdb)npath_put(&path);(gdb)n3945lookup_flags|=LOOKUP_REVAL;(gdb)npath_put(&path);(gdb)nputname(name);(gdb)nif(retry_estale(error,lookup_flags)(gdb)n3949(gdb)ndo_syscall_64(nr=180688,regs=0 xffffc90000033f58)atarch/x86/entry/common.c:300300syscall_return_slowpath(regs);(gdb)n301(gdb)nentry_SY
10、SCALL_64()atarch/x86/entry/entry_64.S:184184movqRCX(%rsp),%rcx(gdb)n185movqRIP(%rsp),%r11(gdb)n187cmpq%rcx,%r11/*SYSRETrequiresRCX=RIP*/(gdb)n188jneswapgs_restore_regs_and_return_to_usermode(gdb)n205shl$(64-(_VIRTUAL_MASK_SHIFT+1),%rcx(gdb)n206sar$(64-(_VIRTUAL_MASK_SHIFT+1),%rcx(gdb)n210cmpq%rcx,%r
11、11(gdb)n211jneswapgs_restore_regs_and_return_to_usermode(gdb)n213cmpq$_USER_CS,CS(%rsp)/*CSmustmatchSYSRET*/(gdb)n214jneswapgs_restore_regs_and_return_to_usermode(gdb)nmovqR11(%rsp),%r11(gdb)ncmpq%r11,EFLAGS(%rsp)/*R11=RFLAGS*/(gdb)njneswapgs_restore_regs_and_return_to_usermode(gdb)n238testq$(X86_EF
12、LAGS_RF|X86_EFLAGS_TF),%r11(gdb)n239jnzswapgs_restore_regs_and_return_to_usermode(gdb)n243cmpq$_USER_DS,SS(%rsp)/*SSmustmatchSYSRET*/(gdb)n244jneswapgs_restore_regs_and_return_to_usermode(gdb)n253POP_REGSpop_rdi=0skip_r11rcx=1(gdb)nentry_SYSCALL_64()atarch/x86/entry/entry_64.S:259259movq%rsp,%rdi(gd
13、b)n260movqPER_CPU_VAR(cpu_tss_rw+TSS_sp0),%rsp(gdb)nentry_SYSCALL_64()atarch/x86/entry/entry_64.S:262262pushqRSP-RDI(%rdi)/*RSP*/(gdb)nentry_SYSCALL_64()atarch/x86/entry/entry_64.S:263263pushq(%rdi)/*RDI*/(gdb)nentry_SYSCALL_64()atarch/x86/entry/entry_64.S:271271SWITCH_TO_USER_CR3_STACKscratch_reg=%rdi(gdb)npopq%rdi(gdb)nentry_SYSCALL_64()atarch/x86/entry/entry_64.S:274popq%rsp(gdb)nentry_SYSCALL_64()atarch/x86/entry/entry_64.S:275USERGS_SYSRET64(gdb)n0 x0000000
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- NCGC00537446-生命科学试剂-MCE
- MLS000389544-生命科学试剂-MCE
- 电力系统持续运营的风险管理与预警系统设计
- 借款合同范本q
- 生产设备维护的成本控制与管理
- 科技与美食文化的碰撞打造未来餐饮连锁
- 树林竞价合同范本
- 科技展会中的个人品牌推广策略
- 土地托管中介合同范本
- 科技公司如何平衡用户体验与信息安全的策略研究
- 中国胎儿心脏超声检查指南
- 学校教育中的品牌塑造与校园文化建设培训课件
- 中移光缆培训资料
- 消防救援-低温雨雪冰冻恶劣天气条件下灾害防范及救援行动与安全
- 济南广播电视台面向社会招聘工作人员笔试参考题库(共500题)答案详解版
- 主播试用期合同模板
- 《市场营销学》吴建安
- 光伏电站收益率测算模型(带财务表)
- 【公司会计信息化建设研究文献综述2000字】
- 沧州师范学院学士学位论文写作指南2020版
- 【高中语文】《中国人民站起来了》课件40张+统编版高中语文选择性必修上册
评论
0/150
提交评论