Hans'ın cevabını eklemek için, o bayrağa yanıt veren bazı Windows çekirdek modu kodu da vardır. Yüklenen her yürütülebilir dosya, onunla ilişkili SECTION_IMAGE_INFORMATION
çekirdek yapısına sahiptir. İşte sembol bilgiler aşağıda belirtilmiştir:
0: kd> dt nt!_SECTION_IMAGE_INFORMATION
+0x000 TransferAddress : Ptr64 Void
+0x008 ZeroBits : Uint4B
+0x010 MaximumStackSize : Uint8B
+0x018 CommittedStackSize : Uint8B
+0x020 SubSystemType : Uint4B
+0x024 SubSystemMinorVersion : Uint2B
+0x026 SubSystemMajorVersion : Uint2B
+0x024 SubSystemVersion : Uint4B
+0x028 GpValue : Uint4B
+0x02c ImageCharacteristics : Uint2B
+0x02e DllCharacteristics : Uint2B
+0x030 Machine : Uint2B
+0x032 ImageContainsCode : UChar
+0x033 ImageFlags : UChar
+0x033 ComPlusNativeReady : Pos 0, 1 Bit
+0x033 ComPlusILOnly : Pos 1, 1 Bit
+0x033 ImageDynamicallyRelocated : Pos 2, 1 Bit
+0x033 ImageMappedFlat : Pos 3, 1 Bit
+0x033 BaseBelow4gb : Pos 4, 1 Bit
+0x033 Reserved : Pos 5, 3 Bits
ComPlusILOnly
ve ComPlusNativeReady
.NET ile ilgili bayraklar, ComPlusILOnly
basitçe montaj sadece (karma veya yerli olmayan - montaj zaten mimari özgüdür bu durumda) CIL ise söyler ve ComPlusNativeReady
yalnızca 1/32BIT + ayarlanmamışsa 1'dir (32BITREQ or 32BITPREF in newer CorFlags version). Bu bayraklar nt!PspAllocateProcess
sırasında kontrol edilir ve bir 32-bit
veya 64-bit
işleminin oluşturulmasına dayanır. Bazı detaylar ile birlikte
I wrote about it.
Hızlı cevap için teşekkürler. Bu iyi bir başlangıç noktasıdır. Clrel'in .reloc bölümleriyle nasıl çalıştığını öğrenmek istedim. Ben çoğunlukla pedecoder.h/pewriter.cpp içinde sscli kazdık ve cevaplarımı buldum. Hala birçok soru var (örneğin, Windows 2000 x64 hakkında) ama sanırım cevapları sscli'de bulabilirim. –
Bu kolay bir, Windows 2000 x64 en son Yeti'nin beyaz tarafından kullanıldığı görülüyor. –
Vay. Windows için uygun yağ (yerel kod) ikili dosyaları oluşturmak için bu "özel farkındalık" dan yararlanmak için herhangi bir yolu olup olmadığını merak ediyorum. – Fowl