Example #1
0
            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);
            }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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);
        }