internal TargetAddress ReadDynamicInfo(Inferior inferior) { Section section = GetSectionByName(".dynamic", false); if (section == null) { return(TargetAddress.Null); } TargetAddress vma = new TargetAddress(info.AddressDomain, section.vma); int size = (int)section.size; byte[] dynamic = inferior.ReadBuffer(vma, size); IntPtr data = IntPtr.Zero; try { data = Marshal.AllocHGlobal(size); Marshal.Copy(dynamic, 0, data, size); long base_ptr = bfd_glue_elfi386_locate_base(bfd, data, size); if (base_ptr == 0) { return(TargetAddress.Null); } else { return(new TargetAddress(info.AddressDomain, base_ptr)); } } finally { if (data != IntPtr.Zero) { Marshal.FreeHGlobal(data); } } }