@@ -386,20 +386,6 @@ public MonoBinaryReader(Stream stream, bool hasError = false) : base(stream)
386386 HasError = hasError ;
387387 }
388388
389- internal static void SwapForBE ( Span < byte > dest , Span < byte > src )
390- {
391- // SDB is big endian
392- if ( BitConverter . IsLittleEndian )
393- {
394- for ( int i = 0 ; i < src . Length ; i ++ )
395- dest [ src . Length - i - 1 ] = src [ i ] ;
396- }
397- else
398- {
399- src . CopyTo ( dest ) ;
400- }
401- }
402-
403389 public override string ReadString ( )
404390 {
405391 var valueLen = ReadInt32 ( ) ;
@@ -413,20 +399,24 @@ public override string ReadString()
413399 public override sbyte ReadSByte ( ) => ( sbyte ) ReadInt32 ( ) ;
414400 public byte ReadUByte ( ) => ( byte ) ReadUInt32 ( ) ;
415401 public ushort ReadUShort ( ) => ( ushort ) ReadUInt32 ( ) ;
416- public override unsafe int ReadInt32 ( ) => Read < int > ( ) ;
402+ public override int ReadInt32 ( ) => ReadBigEndian < int > ( ) ;
417403
418- public override unsafe double ReadDouble ( ) => Read < double > ( ) ;
419- public override unsafe uint ReadUInt32 ( ) => Read < uint > ( ) ;
420- public override unsafe float ReadSingle ( ) => Read < float > ( ) ;
421- public override unsafe ulong ReadUInt64 ( ) => Read < ulong > ( ) ;
422- public override unsafe long ReadInt64 ( ) => Read < long > ( ) ;
404+ public override double ReadDouble ( ) => ReadBigEndian < double > ( ) ;
405+ public override uint ReadUInt32 ( ) => ReadBigEndian < uint > ( ) ;
406+ public override float ReadSingle ( ) => ReadBigEndian < float > ( ) ;
407+ public override ulong ReadUInt64 ( ) => ReadBigEndian < ulong > ( ) ;
408+ public override long ReadInt64 ( ) => ReadBigEndian < long > ( ) ;
423409
424- protected unsafe T Read < T > ( ) where T : struct
410+ protected unsafe T ReadBigEndian < T > ( ) where T : struct
425411 {
426412 Span < byte > data = stackalloc byte [ Unsafe . SizeOf < T > ( ) ] ;
427413 T ret = default ;
428414 Read ( data ) ;
429- SwapForBE ( new Span < byte > ( Unsafe . AsPointer ( ref ret ) , data . Length ) , data ) ;
415+ if ( BitConverter . IsLittleEndian )
416+ {
417+ data . Reverse ( ) ;
418+ }
419+ data . CopyTo ( new Span < byte > ( Unsafe . AsPointer ( ref ret ) , data . Length ) ) ;
430420 return ret ;
431421 }
432422 }
@@ -435,20 +425,24 @@ internal class MonoBinaryWriter : BinaryWriter
435425 {
436426 public MonoBinaryWriter ( Stream stream ) : base ( stream ) { }
437427
438- public void WriteString ( string val )
428+ public override void Write ( string val )
439429 {
440430 var bytes = Encoding . UTF8 . GetBytes ( val ) ;
441431 Write ( bytes . Length ) ;
442432 Write ( bytes ) ;
443433 }
444434
445- public override unsafe void Write ( long val ) => WriteType < long > ( val ) ;
446- public override unsafe void Write ( int val ) => WriteType < int > ( val ) ;
435+ public override void Write ( long val ) => WriteBigEndian < long > ( val ) ;
436+ public override void Write ( int val ) => WriteBigEndian < int > ( val ) ;
447437
448- protected unsafe void WriteType < T > ( T val ) where T : struct
438+ protected unsafe void WriteBigEndian < T > ( T val ) where T : struct
449439 {
450440 Span < byte > data = stackalloc byte [ Unsafe . SizeOf < T > ( ) ] ;
451- MonoBinaryReader . SwapForBE ( data , new Span < byte > ( Unsafe . AsPointer ( ref val ) , data . Length ) ) ;
441+ new Span < byte > ( Unsafe . AsPointer ( ref val ) , data . Length ) . CopyTo ( data ) ;
442+ if ( BitConverter . IsLittleEndian )
443+ {
444+ data . Reverse ( ) ;
445+ }
452446 base . Write ( data ) ;
453447 }
454448
@@ -821,7 +815,7 @@ public async Task<int> CreateString(SessionId sessionId, string value, Cancellat
821815 var retDebuggerCmdReader = await SendDebuggerAgentCommand < CmdAppDomain > ( sessionId , CmdAppDomain . GetRootDomain , commandParams , token ) ;
822816 var root_domain = retDebuggerCmdReader . ReadInt32 ( ) ;
823817 commandParamsWriter . Write ( root_domain ) ;
824- commandParamsWriter . WriteString ( value ) ;
818+ commandParamsWriter . Write ( value ) ;
825819 retDebuggerCmdReader = await SendDebuggerAgentCommand < CmdAppDomain > ( sessionId , CmdAppDomain . CreateString , commandParams , token ) ;
826820 return retDebuggerCmdReader . ReadInt32 ( ) ;
827821 }
@@ -932,7 +926,7 @@ public async Task<int> GetAssemblyId(SessionId sessionId, string asm_name, Cance
932926 {
933927 var commandParams = new MemoryStream ( ) ;
934928 var commandParamsWriter = new MonoBinaryWriter ( commandParams ) ;
935- commandParamsWriter . WriteString ( asm_name ) ;
929+ commandParamsWriter . Write ( asm_name ) ;
936930
937931 var retDebuggerCmdReader = await SendDebuggerAgentCommand < CmdVM > ( sessionId , CmdVM . GetAssemblyByName , commandParams , token ) ;
938932 return retDebuggerCmdReader . ReadInt32 ( ) ;
@@ -1452,7 +1446,7 @@ public async Task<int> GetMethodIdByName(SessionId sessionId, int type_id, strin
14521446 var commandParams = new MemoryStream ( ) ;
14531447 var commandParamsWriter = new MonoBinaryWriter ( commandParams ) ;
14541448 commandParamsWriter . Write ( ( int ) type_id ) ;
1455- commandParamsWriter . WriteString ( method_name ) ;
1449+ commandParamsWriter . Write ( method_name ) ;
14561450 commandParamsWriter . Write ( ( int ) ( BindingFlags . Public | BindingFlags . NonPublic | BindingFlags . Instance | BindingFlags . Static ) ) ;
14571451 commandParamsWriter . Write ( ( int ) 1 ) ; //case sensitive
14581452 var retDebuggerCmdReader = await SendDebuggerAgentCommand < CmdType > ( sessionId , CmdType . GetMethodsByNameFlags , commandParams , token ) ;
@@ -2198,7 +2192,7 @@ public async Task<int> GetTypeByName(SessionId sessionId, string typeToSearch, C
21982192 {
21992193 var commandParams = new MemoryStream ( ) ;
22002194 var commandParamsWriter = new MonoBinaryWriter ( commandParams ) ;
2201- commandParamsWriter . WriteString ( typeToSearch ) ;
2195+ commandParamsWriter . Write ( typeToSearch ) ;
22022196 var retDebuggerCmdReader = await SendDebuggerAgentCommand < CmdVM > ( sessionId , CmdVM . GetTypes , commandParams , token ) ;
22032197 var count = retDebuggerCmdReader . ReadInt32 ( ) ; //count ret
22042198 return retDebuggerCmdReader . ReadInt32 ( ) ;
0 commit comments