mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-07 15:03:34 +00:00
5bd22aef12
So far I haven't found any way to run native Arm64 code on Windows Arm64 without using MSVC. When I build a PE binary from scratch that should be a valid Windows Arm64 program, the OS refuses to run it. Possibly due to requiring additional content like XML manifests or relocation or control flow integrity data that isn't normally required on x64. I've also tried using VirtualAlloc2() to JIT an Arm64 native function, but VirtualAlloc2 always fails with invalid parameter. I tried using MSVC to create an ARM DLL that my x64 emulated program can link at runtime, to pass a function pointer with ARM code, but LoadLibrary() rejects ARM DLLs as invalid exe The only option left, is likely to write a new program like ape/ape-m1.c which can be compiled by MSVC to load and run an AARCH64 ELF executable. The emulated x64 binary would detect emulation using IsWow64Process2 and then drop the loader executable in a temporary folder, and re-launch the original executable, using the Arm64 segments of the cosmocc fat binary.
36 lines
1.3 KiB
C
36 lines
1.3 KiB
C
#ifndef COSMOPOLITAN_LIBC_NT_STRUCT_MEMEXTENDEDPARAMETER_H_
|
|
#define COSMOPOLITAN_LIBC_NT_STRUCT_MEMEXTENDEDPARAMETER_H_
|
|
|
|
#define kNtMemExtendedParameterTypeBits 8
|
|
|
|
#define kNtMemExtendedParameterInvalidType 0
|
|
#define kNtMemExtendedParameterAddressRequirements 1
|
|
#define kNtMemExtendedParameterNumaNode 2
|
|
#define kNtMemExtendedParameterPartitionHandle 3
|
|
#define kNtMemExtendedParameterUserPhysicalHandle 4
|
|
#define kNtMemExtendedParameterAttributeFlags 5
|
|
#define kNtMemExtendedParameterImageMachine 6
|
|
#define kNtMemExtendedParameterMax 7
|
|
|
|
#define kNtMemExtendedParameterGraphics 0x00000001
|
|
#define kNtMemExtendedParameterNonpaged 0x00000002
|
|
#define kNtMemExtendedParameterZeroPagesOptional 0x00000004
|
|
#define kNtMemExtendedParameterNonpagedLarge 0x00000008
|
|
#define kNtMemExtendedParameterNonpagedHuge 0x00000010
|
|
#define kNtMemExtendedParameterSoftFaultPages 0x00000020
|
|
#define kNtMemExtendedParameterEcCode 0x00000040
|
|
#define kNtMemExtendedParameterImageNoHpat 0x00000080
|
|
|
|
struct NtMemExtendedParameter {
|
|
uint8_t Type;
|
|
uint8_t Reserved[7];
|
|
union {
|
|
uint64_t ULong64;
|
|
void *Pointer;
|
|
size_t Size;
|
|
intptr_t Handle;
|
|
unsigned ULong;
|
|
};
|
|
};
|
|
|
|
#endif /* COSMOPOLITAN_LIBC_NT_STRUCT_MEMEXTENDEDPARAMETER_H_ */
|