Beispiel #1
0
        /// <summary>
        /// Disassembles the assembly code for reified methods declared by the source type
        /// </summary>
        /// <param name="src">The source type</param>
        public static AsmFuncInfo[] DistillAsm(this Type src)
        {
            var disassembly = src.Deconstruct();
            var dst         = new AsmFuncInfo[disassembly.Length];

            for (var i = 0; i < disassembly.Length; i++)
            {
                dst[i] = disassembly[i].DistillAsm();
            }
            return(dst);
        }
Beispiel #2
0
        public static string FormatInstructions(this AsmFuncInfo src, int?pad = null)
        {
            var format = sbuild();

            for (var i = 0; i < src.InstructionCount; i++)
            {
                var insx = src.Instructions[i];
                var fmt  = insx.Format(pad ?? IPad);
                if (i != src.InstructionCount - 1)
                {
                    format.AppendLine(fmt);
                }
                else
                {
                    format.Append(fmt);
                }
            }
            return(format.ToString());
        }
Beispiel #3
0
 /// <summary>
 /// Formats an assembly function specifier
 /// </summary>
 /// <param name="src">The source function</param>
 /// <param name="pad">The padding between each instruction and associated commentary</param>
 public static string Format(this AsmFuncInfo src, int?pad = null)
 => lines(src.FormatHeader(), src.FormatInstructions(pad), src.FormatFooter());
Beispiel #4
0
        /// <summary>
        /// Formats the encoded bytes as a comment
        /// </summary>
        /// <param name="src">The source function</param>
        public static string FormatFooter(this AsmFuncInfo src)
        {
            var propdecl = $"static ReadOnlySpan<byte> {src.FunctionName}Bytes";

            return(concat(BeginComment, $"{propdecl} => new byte[{src.Encoding.Length}]", src.FormatEncoding(), AsciSym.Semicolon));
        }
Beispiel #5
0
 /// <summary>
 /// Formats the function body encoding
 /// </summary>
 /// <param name="src">The source function</param>
 public static string FormatEncoding(this AsmFuncInfo src)
 => embrace(src.Encoding.FormatHex(AsciSym.Comma, true, true, true));
Beispiel #6
0
 /// <summary>
 /// Formats the function header
 /// </summary>
 /// <param name="src">The source function</param>
 /// <param name="pad"></param>
 public static string FormatHeader(this AsmFuncInfo src)
 => concat(
     line(concat(BeginComment, $"function: {src.Signature.Format()}")),
     concat(BeginComment, $"location: {src.StartAddress.GlobalHexRange(src.EndAddress)}")
     );