代码之家  ›  专栏  ›  技术社区  ›  Ilian

如何实现应用程序虚拟化?

  •  9
  • Ilian  · 技术社区  · 15 年前

    我想知道软件是怎样的 App-V 桑德谢 http://www.sandboxie.com/ )工作。但是对于我的生活,我想不出任何能让这成为可能的事情。他们如何拦截API调用并欺骗目标软件?如果有人说这只是魔法和小精灵的尘埃,我会相信他们。但说真的,有没有白皮书讨论这个问题的解决方案?

    如果这在clr级别是可能的,那就太好了,但是如果必须的话,我愿意选择本地的。

    3 回复  |  直到 14 年前
        1
  •  3
  •   BlueRaja - Danny Pflughoeft    15 年前

    Sandboxie通过向核心WindowsAPI注入代码来实现这一点,就像病毒一样(这就是为什么VistaX64会阻止这种行为,以及为什么Sandboxie不能在该操作系统上工作)。

    Here 是一个解释API挂钩的项目。我通过研究 Metamod:Source (用于sourceMod的counterStrike:source:)

        2
  •  0
  •   Sparky    15 年前

    我不知道微软是怎么做到的,但这里有一个基本理论,就是一种方法…

    您要做的是钩住系统调用(类似于链接到中断)。

    1. 系统调用发生。
    2. 将执行自定义截获。
    3. 如果此系统调用不需要特殊处理,请继续。否则,它需要特殊处理并转到步骤4。
    4. 从堆栈中获取堆栈指针、指令指针和所有Jazz,并构建一个新的堆栈框架,将您发送回用户区中的自定义代码。
    5. 在用户土地上做数据、路径和东西的按摩。这样,如果底层操作系统发生变化,则不必[像往常一样]更新此代码。
    6. 在所有数据按摩之后,再次执行系统调用。
    7. 您的自定义中断会再次执行,但它应该检测到您正在从用户Land Helper层调用,并通过传递调用。可能需要一些堆栈帧操作来设置正确的返回地址。
    8. 执行常规系统调用。
    9. 当系统调用返回时,堆栈帧应该将您发送回常规程序流。

    希望这有帮助。

        3
  •  0
  •   saschabeaumont    14 年前

    查看维基百科网页 X86 Virtualization 这两方面都有讨论 软件虚拟化 (早期的Vmware、Wine、Sandboxie和某种程度上的app-v)以及更现代的 硬件虚拟化 (Hyper-V、VMware等)。

    我假设你在找 软件虚拟化 就像使用.NET(或任何CLR)一样,在某种程度上,您已经将自己从CPU体系结构中抽象出来了,特别是使用“any cpu”目标。