private void DoOpenObjFile(string fileName) { ObjectLibrary library = OmfLoader.LoadObject(fileName); library.ResolveAllSymbols(); LibraryDisassembler dasm = new LibraryDisassembler(library); dasm.Analyze(); this.program = library; this.procedureList.Program = program; this.errorList.Program = program; this.segmentList.Program = program; this.libraryBrowser.Library = library; }
private void DoOpenLibFile(string fileName) { ObjectLibrary library = OmfLoader.LoadLibrary(fileName); library.ResolveAllSymbols(); LibraryDisassembler dasm = new LibraryDisassembler(library); dasm.Analyze(); this.program = library; this.procedureList.Program = program; this.errorList.Program = program; this.segmentList.Program = program; // Display all unresolved symbols. foreach (string key in library.GetUnresolvedSymbols()) { System.Diagnostics.Debug.WriteLine(string.Format( "Symbol {0} is unresolved.", key)); } this.libraryBrowser.Library = library; #if false string symbolToFind = "FISRQQ"; foreach (var mod in library.Symbols[symbolToFind]) { System.Diagnostics.Debug.WriteLine(string.Format( "Symbol {0} is defined in module {1}", symbolToFind, mod.Name)); } //library.DuplicateSymbols ObjectModule module = library.FindModule("_ctype"); DefinedSymbol symbol = module.DefinedNames.Find(x => x.Name == "_isupper"); Address entryPoint = new Address( symbol.BaseSegment.Id, (int)symbol.Offset); Disassembler16New dasm = new Disassembler16New(library); dasm.Analyze(entryPoint); this.disassemblyList.SetView(library, symbol.BaseSegment); #endif }
private void btnTest_Click(object sender, EventArgs e) { #if false CallGraphWindow f = new CallGraphWindow(); LinearPointer procEntry = dasm.Image.BaseAddress.LinearAddress + 0x14FE; f.SourceProcedure = dasm.Image.Procedures.Find(procEntry); f.WindowState = FormWindowState.Maximized; f.Show(this); #else string fileName = @"..\..\..\..\Test\SLIBC7.LIB"; ObjectLibrary library = OmfLoader.LoadLibrary(fileName); propertiesWindow.SelectedObject = library; library.ResolveAllSymbols(); libraryWindow.Library = library; libraryWindow.PropertiesWindow = propertiesWindow; libraryWindow.ListingWindow = listingWindow; #endif }
public void Omfldr_Library_Single_Record() { Given_Omf(LibraryHeader, 0xD, DW(0x10), W(1), B(0), Pad(6)); Given_Omf(THEADR, 0x0C, S("ANSIINJECT"), B(42)); Given_Omf(COMENT, 0x1B, B(0x80), B(0xA0), B(0x01), B(0x01), S("ANSIINJECT"), S("ANSICALL"), W(1), B(42)); Given_Omf(COMENT, 0x08, B(0xC0, 0xFE), DW(0x12345678), B(0), B(42)); Given_Omf(MODEND, 0x02, B(0), B(42), Align(0x10)); Given_Omf(LibraryEnd, 0x0, Align(0x10)); var omf = new OmfLoader(platform.Services, "foo.lib", writer.ToArray()); var typelib = omf.Load(platform, new TypeLibrary()); var module = typelib.Modules["ANSICALL"]; var svc = module.ServicesByOrdinal[1]; Assert.AreEqual("ANSIINJECT", svc.Name); }