public override void Render(ImageSegment segment, Program program, Formatter formatter)
        {
            // Get the entry that has the segment# for the string table.
            var dynStrtab = loader.GetDynEntries(shdr.FileOffset).Where(d => d.d_tag == DT_STRTAB).FirstOrDefault();

            if (dynStrtab == null)
            {
                return;
            }
            this.strtabSection = loader.GetSectionInfoByAddr(dynStrtab.d_ptr);
            foreach (var entry in loader.GetDynEntries(shdr.FileOffset))
            {
                DtFormat fmt;
                string   entryName;
                if (!machineSpecific.TryGetValue(entry.d_tag, out Entry dser) &&
                    !entries.TryGetValue(entry.d_tag, out dser))
                {
                    entryName = string.Format("{0:X8}    ", entry.d_tag);
                    fmt       = DtFormat.Hexadecimal;
                }
                else
                {
                    entryName = dser.Name;
                    fmt       = dser.Format;
                }
                RenderEntry(entryName, fmt, entry, formatter);
                formatter.WriteLine();
            }
        }
Exemple #2
0
        public override void Render(ImageSegment segment, Program program, Formatter formatter)
        {
            // Get the entry that has the segment# for the string table.
            var dynStrtab = loader.GetDynEntries(shdr.FileOffset).Where(d => d.d_tag == DT_STRTAB).FirstOrDefault();

            if (dynStrtab == null)
            {
                return;
            }
            var strtabSection = loader.GetSectionInfoByAddr(dynStrtab.d_ptr);

            foreach (var entry in loader.GetDynEntries(shdr.FileOffset))
            {
                switch (entry.d_tag)
                {
                default:
                    formatter.Write("{0,-12} {1:X8}", entry.d_tag, entry.d_val);
                    break;

                case DT_DEBUG:
                    formatter.Write("{0,-12} {1:X8}", "DT_DEBUG", entry.d_val);
                    break;

                case DT_FINI:
                    formatter.Write("{0,-12} ", "DT_FINI");
                    formatter.WriteHyperlink(string.Format("{0:X8}", entry.d_ptr), Address.Ptr32(entry.d_ptr));
                    break;

                case DT_HASH:
                    formatter.Write("{0,-12} ", "DT_HASH");
                    formatter.WriteHyperlink(string.Format("{0:X8}", entry.d_ptr), Address.Ptr32(entry.d_ptr));
                    break;

                case DT_INIT:
                    formatter.Write("{0,-12} ", "DT_INIT");
                    formatter.WriteHyperlink(string.Format("{0:X8}", entry.d_ptr), Address.Ptr32(entry.d_ptr));
                    break;

                case DT_JMPREL:
                    formatter.Write("{0,-12} ", "DT_JMPREL");
                    formatter.WriteHyperlink(string.Format("{0:X8}", entry.d_ptr), Address.Ptr32(entry.d_ptr));
                    break;

                case DT_NEEDED:
                    formatter.Write("{0,-12} {1}", "DT_NEEDED", loader.ReadAsciiString(strtabSection.FileOffset + entry.d_ptr));
                    break;

                case DT_STRSZ:
                    formatter.Write("{0,-12} {1:X}", "DT_STRSZ", entry.d_val);
                    break;

                case DT_STRTAB:
                    formatter.Write("{0,-12} ", "DT_STRTAB");
                    formatter.WriteHyperlink(string.Format("{0:X8}", entry.d_ptr), Address.Ptr32(entry.d_ptr));
                    break;

                case DT_SYMENT:
                    formatter.Write("{0,-12} {1}", "DT_SYMENTTRTAB", entry.d_val);
                    break;

                case DT_SYMTAB:
                    formatter.Write("{0,-12} ", "DT_SYMTAB");
                    formatter.WriteHyperlink(string.Format("{0:X8}", entry.d_ptr), Address.Ptr32(entry.d_ptr));
                    break;
                }
                formatter.WriteLine();
            }
        }