【问题标题】:declare variable in assembly in Linux kernel?在 Linux 内核的程序集中声明变量?
【发布时间】:2016-05-26 12:45:43
【问题描述】:

我是汇编和 Linux 内核的新手。我想显示最近用于所有进程的 100 个。(strace 只显示一个进程。)。 为此,我想在arch/kernel/entry_64.s 中声明一个索引为 100 的数组,然后将其内存地址发送到我的系统调用的 C 函数并将它们显示给用户,但我不能在程序集中声明数组。我该怎么做?

【问题讨论】:

  • 在跑步之前先学会走路。从破解 linux 内核开始可能不是最好的主意。无论如何,您需要知道要在数组中存储什么类型的项目。您可以执行array .space 100*item_size 之类的操作。你可能也想把它放在一个可写的部分。
  • 我只想保存系统调用号并添加新的系统调用以显示最近使用的 100 个系统调用。你有更好的主意吗?
  • 你需要这些做什么? strace 怎么样? PS:别忘了你可能有多个核心。
  • strace 显示一个进程使用的系统调用,但我想显示所有进程最近使用的 100 个系统调用
  • 请根据您的要求编辑问题。

标签: assembly linux-kernel x86-64


【解决方案1】:

如果您不能按原样使用审计,那么我建议您调整审计代码路径。

1) 使调用无条件,例如在system_call_fastpath 之前插入jmp auditsys 2) 根据自己的喜好更改audit_syscall_entry(即kernel/auditsc.c 中的C 代码)

【讨论】:

  • 感谢您的回答!如果我在这个文件中声明一个数组,我如何从我的系统调用 C 函数中访问它?
  • 你知道C吗?只需将其声明为全局,并在另一个文件中使用extern。您也可以在另一个文件中创建自己的审计函数,然后更改程序集以调用它而不是原来的。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 2014-04-16
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多