Reko.Scanning.Scanner.ScanImageSymbol C# (CSharp) Method

ScanImageSymbol() public method

public ScanImageSymbol ( Program program, ImageSymbol sym, bool isEntryPoint ) : void
program Program
sym ImageSymbol
isEntryPoint bool
return void
        public void ScanImageSymbol(Program program, ImageSymbol sym, bool isEntryPoint)
        {
            try
            {
                Address addr = sym.Address;
                Procedure proc;
                if (program.Procedures.TryGetValue(addr, out proc))
                    return; // Already scanned. Do nothing.
                if (sym.NoDecompile || IsNoDecompiledProcedure(addr))
                    return;

                proc = EnsureProcedure(addr, sym.Name);
                if (sym.Signature != null)
                {
                    var sser = program.CreateProcedureSerializer();
                    proc.Signature = sser.Deserialize(sym.Signature, proc.Frame);
                }
                else if (sym.Name != null)
                {
                    var exp = program.Platform.SignatureFromName(sym.Name);
                    if (exp != null)
                    {
                        proc.Name = exp.Name;
                        proc.Signature = exp.Signature;
                        proc.EnclosingType = exp.EnclosingType;
                    }
                    else
                    {
                        proc.Name = sym.Name;
                    }
                }

                //if (sp.Characteristics != null)
                //{
                //    proc.Characteristics = sp.Characteristics;
                //}

                var pb = ScanProcedure(sym.Address, sym.Name, sym.ProcessorState);
                proc = pb as Procedure;
                if (isEntryPoint && proc != null)
                {
                    program.CallGraph.AddEntryPoint(proc);
                }
            }
            catch (AddressCorrelatedException aex)
            {
                Error(aex.Address, aex.Message);
            }
        }

Usage Example

コード例 #1
0
ファイル: ImageSymbolWorkItem.cs プロジェクト: xor2003/reko
 public override void Process()
 {
     scanner.ScanImageSymbol(program, sym, isEntryPoint);
 }