当前位置: 首页 > 面试题库 >

在Linux中,在进入sys调用后,%eax中的值是什么?(不是orig_eax)

章涵容
2023-03-14
问题内容

系统调用返回时,我以%eax的形式获得了系统调用返回值,但是在输入时我得到的是-38,即十六进制的0xFFFFFFDA。这同时用于写/读。这个数字是多少
可以用来安全区分入口和出口吗?


问题答案:

syscall条目上eax中的-38显然是ENOSYS(未实现功能),并由arch / x86 / kernel /
entry_32.S中的syscall_trace_entry放置在该位置。我想可以安全地假设它将始终存在于syscall条目中,但是如果syscall返回ENOSYS
它也可以存在于syscall出口中

就个人而言,尽管我也看到一些代码也依赖于ENOSYS,但我始终只跟踪使用ptrace时是进入系统调用还是退出。(我假设您使用的是ptrace)我猜想,如果在将进程附加到syscall时该进程恰好位于syscall中,则它将无法正常工作,但是我很幸运没有遇到这个问题。

我快速浏览了strace源,我猜想它也跟踪状态,因为有一条评论说:“我们将附加到一个已经在运行的进程中。请尝试在syscall中弄清楚该进程的状态以进行处理第一件事很好。”
然后不久,它说:“该进程在syscall中间处于睡眠状态。伪造syscall进入事件。”。

简而言之,该值不能安全地用于区分入口和出口。就是说,我不确定手动跟踪它是最好的方法,因为我真的没有任何可以肯定地告诉您使用该技术的资源。:)



 类似资料:
  • 本文向大家介绍Linux中的GRUB是什么?,包括了Linux中的GRUB是什么?的使用技巧和注意事项,需要的朋友参考一下 GRUB(大统一引导加载程序)是可从GNU项目获得的引导加载程序。引导加载程序非常重要,因为没有它就无法启动操作系统。这是第一个在打开程序时启动的程序。引导程序将控制权转移到操作系统内核。 GRUB功能 GRUB是许多Linux发行版的默认引导程序。这是因为它比许多先前版本的

  • 问题内容: 我正在阅读这篇文章:http : //eviltrout.com/2013/06/15/ember-vs- angular.html 它说, 由于缺乏约定,我想知道有多少Angular项目依赖于不良行为,例如直接在控制器内进行AJAX调用?由于依赖注入,开发人员是否将路由器参数注入指令中?AngularJS新手开发人员是否会以经验丰富的AngularJS开发人员认为惯用的方式来构造代码

  • 我对以下组件的输出感到非常困惑: 它至少在Chrome和Firefox中产生以下输出: 转载:https://codesandbox.io/s/leagle-frost-dmcsl 编辑:我知道严格模式会导致额外的呈现,但如前所述,我会期待相同的消息计数。

  • 问题内容: 我最近从Angular转到了ReactJs。我正在使用jQuery进行API调用。我有一个API,该API返回要打印在列表中的随机用户列表。 我不确定如何编写我的API调用。最佳做法是什么? 我尝试了以下操作,但未得到任何输出。如果需要,我愿意实现替代API库。 下面是我的代码: 问题答案: 在这种情况下,您可以在中进行ajax调用,然后进行更新

  • 问题内容: 我只是想简化我的一个类,并以与flyweight设计模式相同的样式介绍了一些功能。 但是,对于为什么总是调用after ,我有点困惑。我没想到这一点。谁能告诉我为什么会这样,否则我如何实现此功能?(除了将实现放入hack之外)。 这是一个例子: 输出: 为什么? 问题答案: 使用 时,你需要控制一个新实例的创建。 使用 时,你需要一个新的实例的控件初始化。 是实例创建的第一步。首先调用

  • 本文向大家介绍为什么在__new __()之后总是调用__init __()?,包括了为什么在__new __()之后总是调用__init __()?的使用技巧和注意事项,需要的朋友参考一下 Python具有一种称为魔术方法的特殊类型的方法,该方法以前置和双下划线命名。 如果我们想谈论魔术方法__new__,那么显然也需要谈论__init__方法。创建实例时将调用魔术方法__new__。而在创建实