avatar

研究-MacOS程序分析

MacOS程序分析
使用系统调用和使用系统库函数类似,但是,系统库函数我们可以利用函数名进行调用,如_exit, _printf等。但是,我们使用系统调用,则只能利用系统调用号进行调用。这里还有一点需要注意的,就是之前在操作系统基础中提到过,macOS的内核XNU是分为BSD层和Mach层。我们常用的系统调用都属于BSD的系统调用。而BSD层在逻辑地址上是位于Mach层之上的,BSD层要从0x2000000开始。因此,我们实际使用的调用号应该是syscall.h给出的调用号加上0x2000000之后的结果,如SYS_exit的调用号就应当是0x2000001.

在汇编语言中,系统调用号应赋给rax寄存器,然后接下来系统调用的参数按照之前讲的调用约定,依次传给rdi, rsi等寄存器中。最后,使用syscall即可。

比如说,我们在程序中调用SYS_exit系统调用:

文章作者: 咲夜南梦
文章链接: http://yoursite.com/2020/07/18/%E7%A0%94%E7%A9%B6-MacOS%E7%A8%8B%E5%BA%8F%E5%88%86%E6%9E%90/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咲夜南梦's 博客
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论