kprobes中未定义异常处理程序(__und_svc)的作用是什么?

杰亚拉姆

我试图将kprobe转换为可加载的内核模块。

我可以运行samples/kprobes/内核树文件夹中的可用示例

如果我们在kernel(CONFIG_KPROBES)中配置kprobes ,则svc_entry宏将在__und_svc()处理程序中扩展为64个字节

参考: http : //lxr.free-electrons.com/source/arch/arm/kernel/entry-armv.S?a=arm#L245

我的目标是不碰内核,将kprobe用作内核模块。

因此在不启用CONFIG_KPROBES的情况下编译内核。因此svc_entry宏将在__und_svc()中扩展为0

我想摆脱这些疑虑。

  1. 如果kprobe被处理为未定义的指令异常(仅创建bcos kprobe),则__und_svc()调用为什么__und_svc()处理程序对于kprobes的作用是什么

  2. 如果必须使用64字节的内存,那么如何在不编译内核的情况下进行分配。即如何动态地做到这一点。

请分享您的知识。

虚假的噪音

您可能没有得到响应,因为您对事物的了解不是很好,并且linux-arm-kernel列表上的任何人都需要一些时间来做出响应。阅读kprobes.txt并详细研究ARM体系结构。

如果kprobe被处理为未定义的指令异常(仅创建bcos kprobe),则__und_svc()调用为什么__und_svc()处理程序对kprobes的作用是什么

在ARM上,mode0b11011未定义的指令mode发生未定义指令的流程

  1. lr_und = undef指令的pc + 4
  2. SPSR_und =发生指令的模式的CPSR。
  3. 在禁用中断的情况下将模式更改为ARM。
  4. PC =向量基+ 4

第四步的主向量表位于,__vectors_start这只是分支到vector_und该代码是一个称为的宏vector_stub,它决定调用__und_svc__und_usr堆栈是每个进程保留的4 / 8k页。它是包含任务结构和内核堆栈的内核页面。

kprobe的工作方式是将未定义的指令放在您要探查的代码地址上。即,它涉及未定义的指令处理程序这应该是很明显的。它调用两个例程,call_fpedo_undefinstr()您对第二种情况感兴趣,该第二种情况获取操作码并调用call_undef_hook()使用register_undef_hook()添加一个钩子您可以看到arch_init_kprobes()主回调使用kprobe_handler来调用struct pt_regs *regs,它恰好是中保留的额外内存__und_svc请注意,例如,kretprobe_trampoline()它正在与当前正在执行的堆栈配合使用。

如果必须使用64字节的内存,那么如何在不编译内核的情况下进行分配。即如何动态地做到这一点?

不它不是。您可以使用其他机制,但是可能必须修改kprobes代码。您很有可能必须限制功能。也有可能完全重写堆栈帧并在事后保留额外的64个字节。这是不是一种分配kmalloc()它只是从主管堆栈指针中添加/减去一个数字。我想代码会重写未定义处理程序的返回地址,以在kprobed地址的上下文(ISR,下半部分/线程IRQ,work_queue,内核任务)中执行但是您可能还没有遇到其他问题。如果arch_init_kprobes()从未致电过,那么您可以随时在__und_svc; 它只吃掉64个字节的堆栈,这会使内核堆栈更有可能溢出。即改变

__und_svc:
    @ Always reserve 64 bytes, even if kprobe is not active.
    svc_entry 64

arch_init_kprobes() 是真正安装该功能的要素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

laravel中视图变量为“未定义变量”时的异常处理是什么?

来自分类Dev

e和item在CollectionViewSource.Filter事件的事件处理程序中的作用是什么?

来自分类Dev

空异常类的作用是什么?

来自分类Dev

PHP变量定义中的减号的作用是什么?

来自分类Dev

处理程序是否是线程,具有处理程序和线程的Looper的作用是什么?

来自分类Dev

处理程序是否是线程,具有处理程序和线程的Looper的作用是什么?

来自分类Dev

C中未定义行为的副作用是否已定义?

来自分类Dev

gradle中NamedDomainObjectContainer的作用是什么?

来自分类Dev

在Clojure中,assocEx的作用是什么?

来自分类Dev

cudaDeviceReset()在Cuda中的作用是什么

来自分类Dev

在Julia中语法“ |>”的作用是什么?

来自分类Dev

MIPS中括号的作用是什么?

来自分类Dev

{:-9}在python中的作用是什么?

来自分类Dev

Angular中returnUrl的作用是什么

来自分类Dev

gradle中NamedDomainObjectContainer的作用是什么?

来自分类Dev

Spring中ResourceServlet的作用是什么?

来自分类Dev

在Mocha中describe()的作用是什么?

来自分类Dev

$ {$}在PowerShell中的含义/作用是什么?

来自分类Dev

Java中的数学-“%”的作用是什么?

来自分类Dev

在Clojure中,assocEx的作用是什么?

来自分类Dev

awk命令中“ /”的作用是什么?

来自分类Dev

在expressJS路由处理程序中未定义`this`

来自分类Dev

Hapi在处理程序中显示未定义的变量

来自分类Dev

Node.js中的“ ReferenceError:处理程序未定义”

来自分类Dev

在React组件事件处理程序中未定义“ this”

来自分类Dev

我的 VBA 代码中的“标签未定义”是什么?

来自分类Dev

输出中的“未定义”是什么意思?

来自分类Dev

构造函数中引发的异常的处理程序是什么?

来自分类Dev

OpenSSL中的引擎是什么,它的作用是什么?

Related 相关文章

  1. 1

    laravel中视图变量为“未定义变量”时的异常处理是什么?

  2. 2

    e和item在CollectionViewSource.Filter事件的事件处理程序中的作用是什么?

  3. 3

    空异常类的作用是什么?

  4. 4

    PHP变量定义中的减号的作用是什么?

  5. 5

    处理程序是否是线程,具有处理程序和线程的Looper的作用是什么?

  6. 6

    处理程序是否是线程,具有处理程序和线程的Looper的作用是什么?

  7. 7

    C中未定义行为的副作用是否已定义?

  8. 8

    gradle中NamedDomainObjectContainer的作用是什么?

  9. 9

    在Clojure中,assocEx的作用是什么?

  10. 10

    cudaDeviceReset()在Cuda中的作用是什么

  11. 11

    在Julia中语法“ |>”的作用是什么?

  12. 12

    MIPS中括号的作用是什么?

  13. 13

    {:-9}在python中的作用是什么?

  14. 14

    Angular中returnUrl的作用是什么

  15. 15

    gradle中NamedDomainObjectContainer的作用是什么?

  16. 16

    Spring中ResourceServlet的作用是什么?

  17. 17

    在Mocha中describe()的作用是什么?

  18. 18

    $ {$}在PowerShell中的含义/作用是什么?

  19. 19

    Java中的数学-“%”的作用是什么?

  20. 20

    在Clojure中,assocEx的作用是什么?

  21. 21

    awk命令中“ /”的作用是什么?

  22. 22

    在expressJS路由处理程序中未定义`this`

  23. 23

    Hapi在处理程序中显示未定义的变量

  24. 24

    Node.js中的“ ReferenceError:处理程序未定义”

  25. 25

    在React组件事件处理程序中未定义“ this”

  26. 26

    我的 VBA 代码中的“标签未定义”是什么?

  27. 27

    输出中的“未定义”是什么意思?

  28. 28

    构造函数中引发的异常的处理程序是什么?

  29. 29

    OpenSSL中的引擎是什么,它的作用是什么?

热门标签

归档