public unsafe string GetSymbolName(int symbolIndex) { // check symbol range if (symbolIndex < 0) { return(null); } if (symbolIndex >= SymbolTable.nsyms) { // handle special symbols SpecialSymbol specialSymbol = (SpecialSymbol)(symbolIndex - (int)SymbolTable.nsyms); switch (specialSymbol) { case SpecialSymbol.SegmentStart: return("_start"); case SpecialSymbol.SegmentEnd: return(null); default: // out of range? return(null); } } IntPtr baseaddr = Slide + (int)(LinkEdit.vmaddr - LinkEdit.fileoff); IntPtr straddr = baseaddr + (int)SymbolTable.stroff; IntPtr symaddr = baseaddr + (int)SymbolTable.symoff; nlist n = (nlist)Marshal.PtrToStructure(symaddr + symbolIndex * sizeof(nlist), typeof(nlist)); var symbolName = Marshal.PtrToStringAnsi(straddr + n.n_strx); return(symbolName); }
private unsafe void AddImageSymbols(ref ImageSymbolInfo image) { IntPtr baseaddr = image.Slide + (int)(image.LinkEdit.vmaddr - image.LinkEdit.fileoff); IntPtr symaddr = baseaddr + (int)image.SymbolTable.symoff; for (int symbolIndex = 0; symbolIndex < image.SymbolTable.nsyms; symbolIndex++) { nlist n = (nlist)Marshal.PtrToStructure(symaddr + symbolIndex * sizeof(nlist), typeof(nlist)); // see if this is a valid named symbol using magic flags if ((n.n_value != 0) && (n.n_type & 0xE0) == 0 && (n.n_type & 0xE) == 0xE) { // get address of symbol IntPtr address = image.Slide + (int)n.n_value; AddSymbol((Address)address, image.Index, (uint)symbolIndex); } } }
public void init() { nlist <OrderItem> list1 = new nlist <OrderItem> { item1, item2, item3 }; Order order1 = new Order(1, "Li", list1); nlist <OrderItem> list2 = new nlist <OrderItem> { item2, item3, item1 }; Order order2 = new Order(2, "Li", list2); nlist <OrderItem> list3 = new nlist <OrderItem> { }; Order order3 = new Order(3, "Zhao", list3); orderService = new OrderService(); orderService.addOrder(order1); orderService.addOrder(order3); orderService.addOrder(order2); }