示例#1
0
        void ReadComRegData(ComRegData entity)
        {
            if (entity == null)
            {
                return;
            }

            KernelWin.WriteLine("正在处理COM数据 {0}", typeof(ComRegData).Name);

            UInt32 address = (UInt32)entity.Address + ImageBase;

            VBStruct.Make <ComRegData>(entity, address, true);

            if (entity.RegInfo2 == null || entity.RegInfo2.Length <= 0)
            {
                return;
            }

            foreach (ComRegInfo item in entity.RegInfo2)
            {
                KernelWin.WriteLine("COM组件 {0}", item.Name);

                Int32 addr = (Int32)(item.Address + ImageBase);

                VBStruct.Make <ComRegInfo>(item, address, true);

                Bytes.MakeNameAnyway((UInt32)addr, "Com_" + item.Name);
            }
        }
示例#2
0
文件: FrmMain.cs 项目: qipa/IDACSharp
        public void LoadVBInfo(VBInfo info)
        {
            treeView1.Nodes.Clear();

            TreeNodeCollection rootNodes = treeView1.Nodes;
            TreeNodeCollection nodes     = rootNodes;
            TreeNode           node      = null;

            VBHeader vbheader = info.HeaderInfo;

            node     = rootNodes.Add(typeof(VBHeader).Name);
            node.Tag = vbheader;

            node     = rootNodes.Add(typeof(ProjectInfo).Name);
            node.Tag = vbheader.ProjectInfo2;

            if (vbheader.ProjectInfo2.ObjectTable2 != null)
            {
                node = rootNodes.Add(typeof(ObjectTable).Name);
                ObjectTable entity = vbheader.ProjectInfo2.ObjectTable2;
                node.Tag = entity;

                if (entity.ProjectInfo22 != null)
                {
                    node     = rootNodes.Add(typeof(ProjectInfo2).Name);
                    node.Tag = entity.ProjectInfo22;
                }

                if (entity.Objects != null && entity.Objects.Length > 0)
                {
                    node  = rootNodes.Add("对象");
                    nodes = node.Nodes;

                    foreach (PublicObjectDescriptor item in entity.Objects)
                    {
                        node     = nodes.Add(item.Name);
                        node.Tag = item;

                        TreeNode node2 = null;

                        if (item.ObjectInfo2 != null)
                        {
                            node2     = node.Nodes.Add(typeof(ObjectInfo).Name);
                            node2.Tag = item.ObjectInfo2;
                        }

                        if (item.OptionalObjectInfo != null)
                        {
                            node2     = node.Nodes.Add(typeof(OptionalObjectInfo).Name);
                            node2.Tag = item.OptionalObjectInfo;

                            TreeNode node3 = null;
                            if (item.OptionalObjectInfo.EventLinks != null && item.OptionalObjectInfo.EventLinks.Length > 0)
                            {
                                node2 = node.Nodes.Add("事件");

                                Int32 i = 1;
                                foreach (EventLink2 elm in item.OptionalObjectInfo.EventLinks)
                                {
                                    String name = String.Empty;
                                    if (item.ProcNames != null && item.ProcNames.Length > i - 1)
                                    {
                                        name = item.Name + "_" + item.ProcNames[i - 1].FriendName;
                                    }
                                    if (String.IsNullOrEmpty(name))
                                    {
                                        name = item.Name + "_" + i.ToString("X2");
                                    }
                                    i++;

                                    node3     = node2.Nodes.Add(name);
                                    node3.Tag = elm;
                                }
                            }

                            if (item.OptionalObjectInfo.Controls != null && item.OptionalObjectInfo.Controls.Length > 0)
                            {
                                node2 = node.Nodes.Add("控件");

                                foreach (VBControl elm in item.OptionalObjectInfo.Controls)
                                {
                                    node3     = node2.Nodes.Add(elm.Name2);
                                    node3.Tag = elm;
                                }
                            }
                        }

                        //if (item.ProcNames != null && item.ProcNames.Length > 0)
                        //{
                        //    foreach (ProcName elm in item.ProcNames)
                        //    {
                        //        node2 = node.Nodes.Add(elm.Name);
                        //        node2.Tag = elm;
                        //    }
                        //}
                    }
                }
            }

            if (vbheader.ComRegisterData2 != null)
            {
                node = rootNodes.Add(typeof(ComRegData).Name);
                ComRegData entity = vbheader.ComRegisterData2;
                node.Tag = entity;

                if (entity.RegInfo2 != null && entity.RegInfo2.Length > 0)
                {
                    node  = rootNodes.Add("COM注册");
                    nodes = node.Nodes;

                    foreach (ComRegInfo item in entity.RegInfo2)
                    {
                        node     = nodes.Add(item.Name);
                        node.Tag = item;
                    }
                }
            }

            if (vbheader.ExternalComponentTables != null && vbheader.ExternalComponentTables.Length > 0)
            {
                node  = rootNodes.Add("引用组件");
                nodes = node.Nodes;

                foreach (ExternalComponentTable item in vbheader.ExternalComponentTables)
                {
                    node     = nodes.Add(item.Name2);
                    node.Tag = item;
                }
            }

            if (vbheader.GUITables != null && vbheader.GUITables.Length > 0)
            {
                node  = rootNodes.Add("窗体");
                nodes = node.Nodes;

                foreach (GUITable item in vbheader.GUITables)
                {
                    node     = nodes.Add(typeof(GUITable).Name);
                    node.Tag = item;
                }
            }
        }