예제 #1
0
        public override bool PlusSearch(int methodCount, int typeDefinitionsCount)
        {
            var exec = new SearchSection
            {
                offset     = 0,
                offsetEnd  = (ulong)methodCount, //hack
                address    = 0,
                addressEnd = (ulong)methodCount  //hack
            };
            var data = new SearchSection
            {
                offset     = 1024,
                offsetEnd  = Length,
                address    = 1024,
                addressEnd = Length
            };
            var bss = new SearchSection
            {
                offset     = Length,
                offsetEnd  = long.MaxValue, //hack
                address    = Length,
                addressEnd = long.MaxValue  //hack
            };
            var plusSearch = new PlusSearch(this, methodCount, typeDefinitionsCount, maxMetadataUsages);

            plusSearch.SetSection(SearchSectionType.Exec, exec);
            plusSearch.SetSection(SearchSectionType.Data, data);
            plusSearch.SetSection(SearchSectionType.Bss, bss);
            var codeRegistration     = plusSearch.FindCodeRegistration();
            var metadataRegistration = plusSearch.FindMetadataRegistration();

            return(AutoPlusInit(codeRegistration, metadataRegistration));
        }
예제 #2
0
        public override bool PlusSearch(int methodCount, int typeDefinitionsCount)
        {
            var execList = new List <SectionHeader>();
            var dataList = new List <SectionHeader>();

            foreach (var section in sections)
            {
                switch (section.Characteristics)
                {
                case 0x60000020:
                    execList.Add(section);
                    break;

                case 0x40000040:
                case 0xC0000040:
                    dataList.Add(section);
                    break;
                }
            }
            var plusSearch = new PlusSearch(this, methodCount, typeDefinitionsCount, maxMetadataUsages);
            var data       = dataList.ToArray();
            var exec       = execList.ToArray();

            plusSearch.SetSection(SearchSectionType.Exec, imageBase, exec);
            plusSearch.SetSection(SearchSectionType.Data, imageBase, data);
            plusSearch.SetSection(SearchSectionType.Bss, imageBase, data);
            var codeRegistration     = plusSearch.FindCodeRegistration();
            var metadataRegistration = plusSearch.FindMetadataRegistration();

            return(AutoPlusInit(codeRegistration, metadataRegistration));
        }
예제 #3
0
 public override bool PlusSearch(int methodCount, int typeDefinitionsCount)
 {
     var dataList = new List<Elf64_Phdr>();
     var execList = new List<Elf64_Phdr>();
     foreach (var phdr in programSegment)
     {
         if (phdr.p_memsz != 0ul)
         {
             switch (phdr.p_flags)
             {
                 case 1u: //PF_X
                 case 3u:
                 case 5u:
                 case 7u:
                     execList.Add(phdr);
                     break;
                 case 2u: //PF_W && PF_R
                 case 4u:
                 case 6u:
                     dataList.Add(phdr);
                     break;
             }
         }
     }
     var data = dataList.ToArray();
     var exec = execList.ToArray();
     var plusSearch = new PlusSearch(this, methodCount, typeDefinitionsCount, maxMetadataUsages);
     plusSearch.SetSection(SearchSectionType.Exec, exec);
     plusSearch.SetSection(SearchSectionType.Data, data);
     plusSearch.SetSection(SearchSectionType.Bss, data);
     var codeRegistration = plusSearch.FindCodeRegistration();
     var metadataRegistration = plusSearch.FindMetadataRegistration();
     return AutoPlusInit(codeRegistration, metadataRegistration);
 }
예제 #4
0
        public override bool PlusSearch(int methodCount, int typeDefinitionsCount)
        {
            var plusSearch = new PlusSearch(this, methodCount, typeDefinitionsCount, maxMetadataUsages);

            plusSearch.SetSection(SearchSectionType.Exec, header.TextSegment);
            plusSearch.SetSection(SearchSectionType.Data, header.DataSegment);
            plusSearch.SetSection(SearchSectionType.Bss, header.BssSegment);
            var codeRegistration     = plusSearch.FindCodeRegistration();
            var metadataRegistration = plusSearch.FindMetadataRegistration();

            return(AutoInit(codeRegistration, metadataRegistration));
        }
예제 #5
0
        public override bool PlusSearch(int methodCount, int typeDefinitionsCount)
        {
            var data = sections.Where(x => x.sectname == "__const").ToArray();
            var code = sections.Where(x => x.flags == 0x80000400).ToArray();
            var bss  = sections.Where(x => x.flags == 1u).ToArray();

            var plusSearch = new PlusSearch(this, methodCount, typeDefinitionsCount, maxMetadataUsages);

            plusSearch.SetSection(SearchSectionType.Exec, code);
            plusSearch.SetSection(SearchSectionType.Data, data);
            plusSearch.SetSection(SearchSectionType.Bss, bss);
            var codeRegistration     = plusSearch.FindCodeRegistration();
            var metadataRegistration = plusSearch.FindMetadataRegistration();

            return(AutoInit(codeRegistration, metadataRegistration));
        }
예제 #6
0
파일: Elf.cs 프로젝트: gdbobu/Il2CppDumper
        public override bool PlusSearch(int methodCount, int typeDefinitionsCount)
        {
            if (!isDumped && (!sectionWithName.ContainsKey(".data.rel.ro") || !sectionWithName.ContainsKey(".text") || !sectionWithName.ContainsKey(".bss")))
            {
                Console.WriteLine("ERROR: This file has been protected.");
            }
            var dataList = new List <Elf32_Phdr>();
            var execList = new List <Elf32_Phdr>();

            foreach (var phdr in program_table.Where(x => x.p_type == 1u))
            {
                if (phdr.p_memsz != 0ul)
                {
                    switch (phdr.p_flags)
                    {
                    case 1u:     //PF_X
                    case 3u:
                    case 5u:
                    case 7u:
                        execList.Add(phdr);
                        break;

                    case 2u:     //PF_W && PF_R
                    case 4u:
                    case 6u:
                        dataList.Add(phdr);
                        break;
                    }
                }
            }
            var data       = dataList.ToArray();
            var exec       = execList.ToArray();
            var plusSearch = new PlusSearch(this, methodCount, typeDefinitionsCount, maxMetadataUsages);

            plusSearch.SetSection(SearchSectionType.Exec, exec);
            plusSearch.SetSection(SearchSectionType.Data, data);
            plusSearch.SetSection(SearchSectionType.Bss, data);
            var codeRegistration     = plusSearch.FindCodeRegistration();
            var metadataRegistration = plusSearch.FindMetadataRegistration();

            return(AutoInit(codeRegistration, metadataRegistration));
        }