Por lo que puedo decir, es demasiado pronto para hacer la llamada en esto. Personalmente, no sé cómo escribir un jitter sin utilizar VirtualProtect(), la función core winapi que le permite convertir un trozo de memoria con código máquina generado por el jitter en código ejecutable.
Hay una serie de funciones de winapi nativas disponibles para una aplicación WinRT. La lista de funciones del sistema bendito es available here. Las apis relacionadas con la memoria son bastante limitadas, VirtualQuery es el único en la lista que se acerca.
Entonces, ¿cómo lo hacen las proyecciones de lenguaje actuales? Echemos un vistazo. El CLR tiene una proyección, se carga en cualquier aplicación Metro que escriba en un lenguaje administrado como C#. Ejecutar dumpbin.exe/imports en c: \ windows \ microsoft.net \ framework \ v4.0.30319 \ clr.dll genera una lista bastante grande de dependencias en las DLL de Windows. Un fragmento de ese volcado:
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
Otra proyección de la lengua es para JavaScript, implementado en el motor "Chakra". Difícil averiguar exactamente qué DLL implementa ese motor, es solo un nombre de código. La ejecución de un proyecto de ejemplo de JavaScript con la depuración no administrada habilitada revela que se cargó "jscript9.dll". Hagamos dumpbin.exe/imports en este:
....
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
Bueno, está ahí. Tendría que serlo. El problema es que ahora mismo no se puede llamar a esta función. Ciertamente no pasaría el escrutinio del validador de la Tienda.
Esto tiene que guisarse, al menos hasta que el real WinRT esté disponible, el que se ejecuta en núcleos ARM.No solo el que se ejecuta sobre Win32 que ahora tiene ejecutado en la Vista previa del consumidor de Windows 8. Y puede aprovechar fácilmente las funciones winapi existentes, no solo la lista recortada. Eso será alrededor de fin de año, probablemente. El hardware real no estará en tus manos hasta el verano del próximo año.
WinRT es casi actuando como un recinto de seguridad aquí, así que el acceso a la API VirtualAlloc/VirtualProtect no va a ser cambiado, ya que la API está casi listo para el OEM. Básicamente, aparte de .NET CLR/JIT (y todos los lenguajes dinámicos de .NET que se pueden jed), no habrá forma de implementar un JIT. – xoofx
cuando hablo de WinRT, estaba hablando de todo el "ecosistema WinRT" que significa pura API "WinRT" + Win32/COM autorizado. La aplicación restringida Win32/COM API para Windows 8 Metro funciona casi como un sandbox. Por lo tanto, no habrá forma de que una sección PE lea + escriba + ejecutable, por lo que no habrá JIT. Esto es por diseño en Windows 8 Metro hasta ahora, y dudo mucho que este diseño vaya a cambiar 1 mes antes de la Vista previa de lanzamiento. – xoofx
'HeapCreate' con' HEAP_CREATE_ENABLE_EXECUTE'? –