中断可以这样编程吗?

Can an interrupt be programmed like this?

本文关键字:编程 中断      更新时间:2023-10-16

我正在创建一个可以在后台生成程序的shell。当一个程序开始使用一定数量的内存时,比如100MB,我希望触发一个中断,导致一个函数运行。另一种方法是让一个进程保持运行并检查后台进程的状态。使用中断似乎使用更少的CPU资源。对吗?这可能吗?

我正在尝试在Linux中做这个

在Linux上这样做的一种方法是使用ptrace。然后使用PTRACE_PEEKUSER查看子进程在进行系统调用时提供给内核的值。你会寻找像mmap和/或brk这样的东西。被调用的函数是在执行int 80时由EAX中的值定义的(对不起,我不知道每个mmap或brk的数字)。

当一个程序开始使用一定数量的内存时,比如100MB,我希望触发一个中断,使一个函数运行。

根据需要。如果捕获malloc调用足够,您可能会感兴趣:

  • 教程:Linux中的函数插入,一个如何制作自己的malloc替代品的例子,这里是另一个相关教程:内部内存管理
  • 为malloc创建一个包装函数,并在C - stackoverflow.com中释放,特别是malloc钩子
  • mtrace at GNU C Library.

如果您也想捕获brk(2) -(相关文章),您可能希望遵循一些跟踪解决方案

  • ptrace ()
  • pinktrace

或二进制仪器

  • Valgrind

在Linux操作系统中,可以使用setrlimit为进程设置资源限制。在您的情况下,可以使用RLIMIT_ASRLIMIT_DATA。使用brkmalloc将在达到限制时失败。您可以监视malloc返回的值,并自己引发一个信号。