据我所知,现在还为时过早,无法做出这个判断。我个人不知道如何编写抖动程序而不使用VirtualProtect(),这是一个核心WinAPI函数,它允许您将由抖动生成的机器码转换为可执行代码的内存块。
对于WinRT应用程序,有许多本地WinAPI函数可供使用。祝福的系统函数列表在此处可用。与内存相关的API非常有限,列表中只有VirtualQuery接近。
那么当前的语言预测是如何实现的呢?让我们来看一下。CLR有一个预测,它加载到您在像C#这样的托管语言中编写的任何Metro应用程序中。在c:\windows\microsoft.net\framework\v4.0.30319\clr.dll上运行dumpbin.exe /imports会生成对Windows DLL的依赖项的相当大的列表。其中一段摘录:
Dump of file clr.dll
File Type: DLL
Section contains the following imports:
KERNEL32.dll
...
430 RaiseException
581 VirtualAlloc
584 VirtualFree
589 VirtualQuery
587 VirtualProtect <=== here!
339 HeapDestroy
336 HeapAlloc
342 HeapValidate
540 SleepEx
547 SwitchToThread
... etc
另一种语言投影是针对JavaScript的,实现在“Chakra”引擎中。很难确定哪个DLL实现了该引擎,这只是一个代码名称。启用非托管调试并运行一个示例JavaScript项目会显示加载了“jscript9.dll”。让我们对其执行dumpbin.exe /imports命令:
....
6898F4D5 10D DebugBreak
6891FDA1 55E TerminateProcess
6898EF9E 57E UnhandledExceptionFilter
6891FD58 43C RaiseException
68903BB7 59E VirtualProtect <=== here!
6A218590 366 InterlockedPushEntrySList
6A2185A9 365 InterlockedPopEntrySList
6A2195AA 35C InitializeSListHead
689026F9 598 VirtualAlloc
68902852 59B VirtualFree
6890603E 4A2 ResetWriteWatch
...etc
好的,它在那里。必须得有。问题是,现在你不能调用这个函数。它肯定无法通过商店验证器的审核。
这需要静待至少到真正的WinRT可用,即运行在ARM核心上的WinRT,而不仅仅是运行在Windows 8 Consumer Preview中的Win32上的WinRT。并且可以方便地利用现有的winapi函数,而不仅仅是缩减的列表。这可能会在今年年底左右出现。真正的硬件要到明年夏天才能到你手中。
HEAP_CREATE_ENABLE_EXECUTE
参数创建HeapCreate
堆? - Dwayne Robinson