【问题标题】:How get process information?如何获取进程信息?
【发布时间】:2011-03-12 00:22:55
【问题描述】:

在我的操作系统类中,我们使用 C 进行编程,我们覆盖了定时器中断,之后从我们编写的定时器中断开始,我们必须处理 4 个进程,但我们需要获取进程的上下文,例如指令指针, 数据段等。我们如何从 c 中获取这些信息?如果没有,我们是否还需要在 C 代码中使用 ASM?谢谢:D

我使用的是 Windows XP 32 位的虚拟机,并且使用的是 DOS 16 位的虚拟机

【问题讨论】:

  • 查看您的一些问题并接受一些答案。

标签: c assembly operating-system dos


【解决方案1】:

是的,您至少需要一点汇编语言。一个典型的起点是pusha。这保留了主要的通用寄存器,因此您可以在不破坏任何关键内容的情况下工作。如果您支持 FPU,您可能需要查看 fsave。你分别用popafrestore 恢复那些。

【讨论】:

    【解决方案2】:

    您可能需要使用汇编代码来进行上下文保存/恢复,除非您已经实现了像 getcontext/setcontext 这样的库例程。

    【讨论】:

    • 在哪里可以获得具有该功能的库?
    • @alfjos89:这些通常在您的 C 标准库中,但是您可以下载各种协程/上下文切换库来做类似的事情。
    【解决方案3】:

    我相信这种技术不适用于 EIP 和 EFLAGS,因为它们只能通过特殊指令访问。

    我不知道 DOS 16 位的 movl 等价物,但我想你明白了。

    unsigned long get_ebp() 
    {
      __asm__("movl %ebp, %eax");
    }
    
    int main()
    {
      printf("ebp: 0x%p\n", get_ebp());
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多