2
2
// The .NET Foundation licenses this file to you under the MIT license.
3
3
4
4
using System ;
5
+ using System . Buffers . Binary ;
5
6
using System . IO ;
6
7
using System . Collections . Immutable ;
7
8
using System . Reflection . PortableExecutable ;
@@ -174,16 +175,23 @@ public unsafe void GatherInfo(PEReader peReader, out WCFileInfo wcInfo, out PEFi
174
175
SectionStart : firstWCSection ) ;
175
176
}
176
177
177
- private static void WriteHeader ( Stream s , WebcilHeader header )
178
+ private static void WriteHeader ( Stream s , WebcilHeader webcilHeader )
178
179
{
179
- WriteStructure ( s , header ) ;
180
+ if ( ! BitConverter . IsLittleEndian )
181
+ {
182
+ webcilHeader . version_major = BinaryPrimitives . ReverseEndianness ( webcilHeader . version_major ) ;
183
+ webcilHeader . version_minor = BinaryPrimitives . ReverseEndianness ( webcilHeader . version_minor ) ;
184
+ webcilHeader . coff_sections = BinaryPrimitives . ReverseEndianness ( webcilHeader . coff_sections ) ;
185
+ webcilHeader . pe_cli_header_rva = BinaryPrimitives . ReverseEndianness ( webcilHeader . pe_cli_header_rva ) ;
186
+ webcilHeader . pe_cli_header_size = BinaryPrimitives . ReverseEndianness ( webcilHeader . pe_cli_header_size ) ;
187
+ webcilHeader . pe_debug_rva = BinaryPrimitives . ReverseEndianness ( webcilHeader . pe_debug_rva ) ;
188
+ webcilHeader . pe_debug_size = BinaryPrimitives . ReverseEndianness ( webcilHeader . pe_debug_size ) ;
189
+ }
190
+ WriteStructure ( s , webcilHeader ) ;
180
191
}
181
192
182
193
private static void WriteSectionHeaders ( Stream s , ImmutableArray < WebcilSectionHeader > sectionsHeaders )
183
194
{
184
- // FIXME: fixup endianness
185
- if ( ! BitConverter . IsLittleEndian )
186
- throw new NotImplementedException ( ) ;
187
195
foreach ( var sectionHeader in sectionsHeaders )
188
196
{
189
197
WriteSectionHeader ( s , sectionHeader ) ;
@@ -192,16 +200,23 @@ private static void WriteSectionHeaders(Stream s, ImmutableArray<WebcilSectionHe
192
200
193
201
private static void WriteSectionHeader ( Stream s , WebcilSectionHeader sectionHeader )
194
202
{
203
+ if ( ! BitConverter . IsLittleEndian )
204
+ {
205
+ sectionHeader = new WebcilSectionHeader
206
+ (
207
+ virtualSize : BinaryPrimitives . ReverseEndianness ( sectionHeader . VirtualSize ) ,
208
+ virtualAddress : BinaryPrimitives . ReverseEndianness ( sectionHeader . VirtualAddress ) ,
209
+ sizeOfRawData : BinaryPrimitives . ReverseEndianness ( sectionHeader . SizeOfRawData ) ,
210
+ pointerToRawData : BinaryPrimitives . ReverseEndianness ( sectionHeader . PointerToRawData )
211
+ ) ;
212
+ }
195
213
WriteStructure ( s , sectionHeader ) ;
196
214
}
197
215
198
216
#if NETCOREAPP2_1_OR_GREATER
199
217
private static void WriteStructure < T > ( Stream s , T structure )
200
218
where T : unmanaged
201
219
{
202
- // FIXME: fixup endianness
203
- if ( ! BitConverter . IsLittleEndian )
204
- throw new NotImplementedException ( ) ;
205
220
unsafe
206
221
{
207
222
byte * p = ( byte * ) & structure ;
@@ -212,9 +227,6 @@ private static void WriteStructure<T>(Stream s, T structure)
212
227
private static void WriteStructure < T > ( Stream s , T structure )
213
228
where T : unmanaged
214
229
{
215
- // FIXME: fixup endianness
216
- if ( ! BitConverter . IsLittleEndian )
217
- throw new NotImplementedException ( ) ;
218
230
int size = Marshal . SizeOf < T > ( ) ;
219
231
byte [ ] buffer = new byte [ size ] ;
220
232
IntPtr ptr = IntPtr . Zero ;
0 commit comments