Esempio n. 1
0
        private void AppendSection(XmlDocumentWrapper xml, XmlNode main, ImportFunctionSection s)
        {
            if (main == null || s == null || s.Count <= 0)
            {
                return;
            }

            XmlNode imports = xml.CreateElement(NodeImports);

            if (imports == null)
            {
                return;
            }

            // serialize all the import sections:
            foreach (ImportFunctionModule desc in s.Modules)
            {
                XmlNode m = SerializeImportModule(xml, desc);

                if (m != null)
                {
                    imports.AppendChild(m);
                }
            }

            main.AppendChild(imports);
        }
Esempio n. 2
0
        private void AppendSection(XmlDocumentWrapper xml, XmlNode main, ExportFunctionSection s)
        {
            if (main == null || s == null || s.Count <= 0)
            {
                return;
            }

            XmlNode exports = xml.CreateElement(NodeExports);

            if (exports == null)
            {
                return;
            }

            foreach (ExportFunctionDescription desc in s.Functions)
            {
                XmlNode f = (desc.IsForwarded
                                 ? xml.CreateElementWithText(NodeExportsFunctionForwardedName,
                                                             desc.ForwardedName)
                                 : null);
                XmlNode e = SerializeBaseFunction(xml, desc, f);

                // append function info to exports:
                if (e != null)
                {
                    exports.AppendChild(e);
                }
            }

            // store:
            main.AppendChild(exports);
        }
Esempio n. 3
0
        private XmlNode SerializeBaseFunction(XmlDocumentWrapper xml, BaseFunctionDescription desc, XmlNode optional)
        {
            XmlNode e = xml.CreateElement(NodeFunction);
            XmlNode n = xml.CreateElementWithText(NodeFunctionName, desc.Name);
            XmlNode o = xml.CreateElementWithText(NodeFunctionOrdinal, desc.Ordinal.ToString());
            XmlNode a = xml.CreateElementWithText(NodeFunctionAddress,
                                                  "0x" + desc.VirtualAddress.ToString("X8"));

            // append all info about given function:
            if (n != null)
            {
                e.AppendChild(n);
            }
            if (optional != null)
            {
                e.AppendChild(optional);
            }
            if (o != null)
            {
                e.AppendChild(o);
            }
            if (a != null)
            {
                e.AppendChild(a);
            }

            return(e);
        }
Esempio n. 4
0
        /// <summary>
        /// Generate corresponding XML code.
        /// </summary>
        protected override string GenerateStringCode(string inputFileContent)
        {
            try
            {
                BinaryFile file = new WindowsPortableExecutable();
                WindowsPortableExecutableLoadArgs args = new WindowsPortableExecutableLoadArgs(false);
                XmlDocumentWrapper xml;
                XmlNode            mainNode;
                bool[]             externalParams;

                args.LoadImports = true;
                args.LoadExports = true;

                // load the file:
                file.Load(InputFilePath, args);

                // check integrity:
                if (file.Count < 2)
                {
                    return(string.Format(CoffComments.InvalidContent, InputFilePath));
                }

                // create output XML document:
                xml = new XmlDocumentWrapper();
                xml.DeclareDocument();
                xml.Append(mainNode = DefineMainElement(xml));

                // interprete extenal parameters:
                InterpreteArguments((string.IsNullOrEmpty(FileNamespace.Trim()) ? null : FileNamespace.Split(';')),
                                    out externalParams);

                // serialize proper sections:
                if (externalParams == null || externalParams.Length <= 1 || externalParams[1])
                {
                    AppendSection(xml, mainNode, file[ExportFunctionSection.DefaultName] as ExportFunctionSection);
                }

                if (externalParams == null || externalParams.Length <= 2 || externalParams[2])
                {
                    AppendSection(xml, mainNode, file[ImportFunctionSection.DefaultName] as ImportFunctionSection);
                }

                // and return data as a string:
                return(XmlHelper.ToString(xml, true));
            }
            catch (Exception ex)
            {
                return(string.Format(CoffComments.InvalidOperation, InputFilePath, ex.Message));
            }
        }
Esempio n. 5
0
        private XmlNode SerializeImportForwarder(XmlDocumentWrapper xml, ImportBoundForwarderDescription s)
        {
            XmlNode f = xml.CreateElement(NodeForwarder);

            if (f != null)
            {
                XmlNode n = xml.CreateElementWithText(NodeForwarderName, s.Name);
                XmlNode d = xml.CreateElementWithText(NodeForwarderBoundDate, s.BoundDate.ToString());

                if (n != null)
                {
                    f.AppendChild(n);
                }
                if (d != null)
                {
                    f.AppendChild(d);
                }
            }

            return(f);
        }
Esempio n. 6
0
        private XmlNode SerializeImportModule(XmlDocumentWrapper xml, ImportFunctionModule s)
        {
            XmlNode m = xml.CreateElement(NodeImportsModule);

            if (m != null)
            {
                XmlNode n = xml.CreateElementWithText(NodeImportsModuleName, s.Name);

                if (n != null)
                {
                    m.AppendChild(n);
                }

                // serialize imported forwarders:
                foreach (ImportBoundForwarderDescription desc in s.Forwarders)
                {
                    XmlNode f = SerializeImportForwarder(xml, desc);

                    if (f != null)
                    {
                        m.AppendChild(f);
                    }
                }

                // serialize imported functions:
                foreach (ImportFunctionDescription desc in s.Functions)
                {
                    XmlNode f = SerializeBaseFunction(xml, desc, null);

                    if (f != null)
                    {
                        m.AppendChild(f);
                    }
                }
            }

            return(m);
        }