示例#1
0
        private object ReadDltEntries(DlHeader dlhdr, uint uData, List <string> names)
        {
            var rdr  = MakeReader(uData + dlhdr.dlt_loc);
            var dlts = new List <(string, uint)>();

            for (int i = 0; i < dlhdr.dlt_count; ++i)
            {
                var  addr = Address.Ptr32((uint)rdr.Offset);
                uint n    = rdr.ReadUInt32();
                dlts.Add((names[i], n));
            }
            return(dlts);
        }
示例#2
0
        private List <ImageSymbol> ReadPltEntries(DlHeader dlhdr, SOM_Exec_aux_hdr exeAuxHdr, List <string> names, IProcessorArchitecture arch)
        {
            var rdr  = MakeReader(exeAuxHdr.exec_dfile + dlhdr.plt_loc);
            var dlts = new List <ImageSymbol>();

            for (int i = 0; i < dlhdr.plt_count; ++i)
            {
                var  addr        = Address.Ptr32(exeAuxHdr.exec_dmem + ((uint)rdr.Offset - exeAuxHdr.exec_dfile));
                uint n           = rdr.ReadUInt32();
                uint m           = rdr.ReadUInt32();
                var  name        = names[i + dlhdr.dlt_count];
                var  pltEntry    = ImageSymbol.ExternalProcedure(arch, Address.Ptr32(n), name);
                var  pltGotEntry = ImageSymbol.DataObject(arch, addr, name + "@@GOT", PrimitiveType.Ptr32);
                dlts.Add(pltEntry);
                dlts.Add(pltGotEntry);
            }
            return(dlts);
        }