Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define UNLOADED_FILE 1
- #include <idc.idc>
- static main(void)
- {
- // set 'loading idc file' mode
- set_inf_attr(INF_GENFLAGS, INFFL_LOADIDC|get_inf_attr(INF_GENFLAGS));
- GenInfo(); // various settings
- Segments(); // segmentation
- Enums(); // enumerations
- Structures(); // structure types
- ApplyStrucTInfos(); // structure type infos
- Patches(); // manual patches
- SegRegs(); // segment register values
- Bytes(); // individual bytes (code,data)
- Functions(); // function definitions
- // clear 'loading idc file' mode
- set_inf_attr(INF_GENFLAGS, ~INFFL_LOADIDC&get_inf_attr(INF_GENFLAGS));
- }
- //------------------------------------------------------------------------
- // General information
- static GenInfo(void) {
- delete_all_segments(); // purge database
- set_processor_type("ARM", SETPROC_USER);
- set_inf_attr(INF_COMPILER, 6);
- set_inf_attr(INF_STRLIT_BREAK, 0xA);
- set_flag(INF_CMTFLAG, SW_ALLCMT, 0);
- set_flag(INF_OUTFLAGS, OFLG_SHOW_VOID, 0);
- set_inf_attr(INF_XREFNUM, 2);
- set_flag(INF_OUTFLAGS, OFLG_SHOW_AUTO, 1);
- set_inf_attr(INF_INDENT, 16);
- set_inf_attr(INF_COMMENT, 40);
- set_inf_attr(INF_MAXREF, 0x10);
- add_default_til("gnulnx_arm64");
- }
- //------------------------------------------------------------------------
- // Information about segmentation
- static Segments(void) {
- ;
- add_segm_ex(0X80315000,0X80317BEC,0,2,1,2,ADDSEG_NOSREG);
- SegRename(0X80315000,".text");
- SegClass (0X80315000,"CODE");
- SegDefReg(0x80315000,"T",0x0);
- SegDefReg(0x80315000,"DS",0x0);
- set_segm_type(0X80315000,2);
- add_segm_ex(0X80317BEC,0X80317BF0,0,2,1,2,ADDSEG_NOSREG);
- SegRename(0X80317BEC,".rodata");
- SegClass (0X80317BEC,"CONST");
- SegDefReg(0x80317BEC,"T",0x0);
- SegDefReg(0x80317BEC,"DS",0x0);
- set_segm_type(0X80317BEC,3);
- add_segm_ex(0X80317BF0,0X80317C98,0,2,1,2,ADDSEG_NOSREG);
- SegRename(0X80317BF0,".rela.dyn");
- SegClass (0X80317BF0,"CONST");
- SegDefReg(0x80317BF0,"T",0x0);
- SegDefReg(0x80317BF0,"DS",0x0);
- set_segm_type(0X80317BF0,3);
- add_segm_ex(0X80317C98,0X80317CD0,0,2,1,2,ADDSEG_NOSREG);
- SegRename(0X80317C98,".rodata.1");
- SegClass (0X80317C98,"CONST");
- SegDefReg(0x80317C98,"T",0x0);
- SegDefReg(0x80317C98,"DS",0x0);
- set_segm_type(0X80317C98,3);
- add_segm_ex(0X80317CD0,0X80317D18,0,2,1,2,ADDSEG_NOSREG);
- SegRename(0X80317CD0,".dynsym");
- SegClass (0X80317CD0,"CONST");
- SegDefReg(0x80317CD0,"T",0x0);
- SegDefReg(0x80317CD0,"DS",0x0);
- set_segm_type(0X80317CD0,3);
- add_segm_ex(0X80317D18,0X80317D19,0,2,1,2,ADDSEG_NOSREG);
- SegRename(0X80317D18,".dynstr");
- SegClass (0X80317D18,"CONST");
- SegDefReg(0x80317D18,"T",0x0);
- SegDefReg(0x80317D18,"DS",0x0);
- set_segm_type(0X80317D18,3);
- add_segm_ex(0X80317D19,0X80317D30,0,2,1,2,ADDSEG_NOSREG);
- SegRename(0X80317D19,".rodata.2");
- SegClass (0X80317D19,"CONST");
- SegDefReg(0x80317D19,"T",0x0);
- SegDefReg(0x80317D19,"DS",0x0);
- set_segm_type(0X80317D19,3);
- add_segm_ex(0X80317D30,0X80317E00,0,2,1,2,ADDSEG_NOSREG);
- SegRename(0X80317D30,".dynamic");
- SegClass (0X80317D30,"DATA");
- SegDefReg(0x80317D30,"T",0x0);
- SegDefReg(0x80317D30,"DS",0x0);
- set_segm_type(0X80317D30,3);
- add_segm_ex(0X80317E00,0X80317E80,0,2,1,2,ADDSEG_NOSREG);
- SegRename(0X80317E00,".got");
- SegClass (0X80317E00,"CONST");
- SegDefReg(0x80317E00,"T",0x0);
- SegDefReg(0x80317E00,"DS",0x0);
- set_segm_type(0X80317E00,3);
- add_segm_ex(0X80317E80,0X80317EB0,0,2,1,2,ADDSEG_NOSREG);
- SegRename(0X80317E80,".data");
- SegClass (0X80317E80,"DATA");
- SegDefReg(0x80317E80,"T",0x0);
- SegDefReg(0x80317E80,"DS",0x0);
- set_segm_type(0X80317E80,3);
- add_segm_ex(0X80317EB0,0X80318EB0,0,2,1,2,ADDSEG_NOSREG);
- SegRename(0X80317EB0,".bss");
- SegClass (0X80317EB0,"BSS");
- SegDefReg(0x80317EB0,"T",0x0);
- SegDefReg(0x80317EB0,"DS",0x0);
- set_segm_type(0X80317EB0,9);
- add_segm_ex(0X80319008,0X80319009,0,1,1,2,ADDSEG_NOSREG);
- SegRename(0X80319008,"UNDEF");
- SegClass (0X80319008,"XTRN");
- SegDefReg(0x80319008,"T",0x0);
- SegDefReg(0x80319008,"DS",0x0);
- set_segm_type(0X80319008,1);
- set_inf_attr(INF_LOW_OFF, 0x80315000);
- set_inf_attr(INF_HIGH_OFF, 0x80319009);
- }
- //------------------------------------------------------------------------
- // Information about enum types
- static Enums(void) {
- auto id;
- begin_type_updating(UTP_ENUM);
- end_type_updating(UTP_ENUM);
- }
- static ApplyStrucTInfos_0(void) {
- auto id;
- id = get_struc_id("KInitialPageAllocator");
- SetType(get_member_id(id, 0x0), "KInitialPageAllocator_vt *");
- SetType(get_member_id(id, 0x8), "_QWORD");
- id = get_struc_id("KernelMap");
- SetType(get_member_id(id, 0x0), "_DWORD");
- SetType(get_member_id(id, 0x4), "_DWORD");
- SetType(get_member_id(id, 0x8), "_DWORD");
- SetType(get_member_id(id, 0xC), "_DWORD");
- SetType(get_member_id(id, 0x10), "_DWORD");
- SetType(get_member_id(id, 0x14), "_DWORD");
- SetType(get_member_id(id, 0x18), "_DWORD");
- SetType(get_member_id(id, 0x1C), "_DWORD");
- SetType(get_member_id(id, 0x20), "_DWORD");
- SetType(get_member_id(id, 0x24), "_DWORD");
- SetType(get_member_id(id, 0x28), "_DWORD");
- SetType(get_member_id(id, 0x2C), "_DWORD");
- id = get_struc_id("KInitialPageAllocator_vt");
- SetType(get_member_id(id, 0x0), "void *(__cdecl *)(KInitialPageAllocator *)");
- SetType(get_member_id(id, 0x8), "void (__cdecl *)(KInitialPageAllocator *)");
- id = get_struc_id("KInitialPageTable");
- SetType(get_member_id(id, 0x0), "void *");
- SetType(get_member_id(id, 0x8), "_DWORD");
- return id;
- }
- //------------------------------------------------------------------------
- // Information about type information for structure members
- static ApplyStrucTInfos() {
- ApplyStrucTInfos_0();
- }
- static Structures_0(id) {
- auto mid;
- id = add_struc(-1,"KInitialPageAllocator",0);
- id = add_struc(-1,"KernelMap",0);
- id = add_struc(-1,"KInitialPageAllocator_vt",0);
- id = add_struc(-1,"KInitialPageTable",0);
- id = get_struc_id("KInitialPageAllocator");
- mid = add_struc_member(id,"vtable", 0, 0x35500400, 0XFFFFFFFFFFFFFFFF, 8, 0XFFFFFFFFFFFFFFFF, 0, 0x000009);
- mid = add_struc_member(id,"next_address", 0X8, 0x30000400, -1, 8);
- set_struc_align(id,3);
- id = get_struc_id("KernelMap");
- mid = add_struc_member(id,"text_offset", 0, 0x20000400, -1, 4);
- mid = add_struc_member(id,"text_end_offset", 0X4, 0x20000400, -1, 4);
- mid = add_struc_member(id,"rodata_offset", 0X8, 0x20000400, -1, 4);
- mid = add_struc_member(id,"rodata_end_offset", 0XC, 0x20000400, -1, 4);
- mid = add_struc_member(id,"rwdata_offset", 0X10, 0x20000400, -1, 4);
- mid = add_struc_member(id,"rwdata_end_offset", 0X14, 0x20000400, -1, 4);
- mid = add_struc_member(id,"bss_offset", 0X18, 0x20000400, -1, 4);
- mid = add_struc_member(id,"bss_end_offset", 0X1C, 0x20000400, -1, 4);
- mid = add_struc_member(id,"ini1_end_offset", 0X20, 0x20000400, -1, 4);
- mid = add_struc_member(id,"dynamic_end_offset", 0X24, 0x20000400, -1, 4);
- mid = add_struc_member(id,"init_array_offset", 0X28, 0x20000400, -1, 4);
- mid = add_struc_member(id,"init_array_end_offset", 0X2C, 0x20000400, -1, 4);
- set_struc_align(id,2);
- id = get_struc_id("KInitialPageAllocator_vt");
- mid = add_struc_member(id,"Allocate", 0, 0x35500400, 0XFFFFFFFFFFFFFFFF, 8, 0XFFFFFFFFFFFFFFFF, 0, 0x000009);
- mid = add_struc_member(id,"Free", 0X8, 0x35500400, 0XFFFFFFFFFFFFFFFF, 8, 0XFFFFFFFFFFFFFFFF, 0, 0x000009);
- set_struc_align(id,3);
- id = get_struc_id("KInitialPageTable");
- mid = add_struc_member(id,"l1_table", 0, 0x35500400, 0XFFFFFFFFFFFFFFFF, 8, 0XFFFFFFFFFFFFFFFF, 0, 0x000009);
- mid = add_struc_member(id,"num_l1_entries", 0X8, 0x20000400, -1, 4);
- set_struc_align(id,3);
- return id;
- }
- //------------------------------------------------------------------------
- // Information about structure types
- static Structures(void) {
- auto id;
- begin_type_updating(UTP_STRUCT);
- id = Structures_0(id);
- patch_byte (0X80316944, 0X1F);
- patch_byte (0X80316945, 0X20);
- patch_byte (0X80316946, 0X3);
- patch_byte (0X80316947, 0XD5);
- patch_byte (0X803169A4, 0X1F);
- patch_byte (0X803169A5, 0X20);
- patch_byte (0X803169A6, 0X3);
- patch_byte (0X803169A7, 0XD5);
- patch_byte (0X803169F8, 0X1F);
- patch_byte (0X803169F9, 0X20);
- patch_byte (0X803169FA, 0X3);
- patch_byte (0X803169FB, 0XD5);
- patch_byte (0X80316A34, 0X1F);
- patch_byte (0X80316A35, 0X20);
- patch_byte (0X80316A36, 0X3);
- patch_byte (0X80316A37, 0XD5);
- }
- //------------------------------------------------------------------------
- // Information about bytes
- static Bytes_0(void) {
- auto x;
- #define id x
- create_insn (x=0X80315000);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- set_name (0X80315000, "kernelldr_main");
- create_insn (x=0X80315004);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X8031500C);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X8031502C);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80315034);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80315040);
- op_stkvar (x, 1);
- create_insn (x=0X80315044);
- op_stkvar (x, 1);
- set_cmt (0X80315048, "base_address", 0);
- create_insn (x=0X80315048);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X8031504C);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- set_cmt (0X80315054, "dynamic", 0);
- create_insn (x=0X80315064);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80315070);
- op_stkvar (x, 1);
- set_cmt (0X80315074, "ini1_base_address", 0);
- create_insn (x=0X80315074);
- op_stkvar (x, 1);
- create_insn (x=0X8031507C);
- op_stkvar (x, 1);
- create_insn (x=0X80315084);
- op_stkvar (x, 1);
- create_insn (x=0X80315088);
- op_stkvar (x, 1);
- create_insn (0X80315094);
- set_name (0X80315094, "kernelldr_save_tpidr_registers");
- create_insn (0X803150C0);
- set_name (0X803150C0, "kernelldr_verify_tpidr_el1");
- create_insn (0X803150D4);
- create_insn (0X80315800);
- set_name (0X80315800, "synch_sp0_exception");
- create_insn (0X80315804);
- create_insn (0X80315880);
- set_name (0X80315880, "irq_sp0_exception");
- create_insn (0X80315884);
- create_insn (0X80315900);
- set_name (0X80315900, "fiq_sp0_exception");
- create_insn (0X80315904);
- create_insn (x=0X80315980);
- op_plain_offset (x, 0, 0);
- op_plain_offset (x, 128, 0);
- set_name (0X80315980, "serror_sp0_exception");
- create_insn (0X80315984);
- create_insn (0X80315A00);
- set_name (0X80315A00, "synch_spx_exception");
- create_insn (0X80315A04);
- create_insn (0X80315A80);
- set_name (0X80315A80, "irq_spx_exception");
- create_insn (0X80315A84);
- create_insn (0X80315B00);
- set_name (0X80315B00, "fiq_spx_exception");
- create_insn (0X80315B04);
- create_insn (0X80315B80);
- set_name (0X80315B80, "serror_spx_exception");
- create_insn (0X80315B84);
- create_insn (0X80315C00);
- set_name (0X80315C00, "synch_a64_exception");
- create_insn (0X80315C04);
- create_insn (0X80315C80);
- set_name (0X80315C80, "irq_a64_exception");
- create_insn (0X80315C84);
- create_insn (0X80315D00);
- set_name (0X80315D00, "fiq_a64_exception");
- create_insn (0X80315D04);
- create_insn (0X80315D80);
- set_name (0X80315D80, "serror_a64_exception");
- create_insn (0X80315D84);
- create_insn (0X80315E00);
- set_name (0X80315E00, "synch_a32_exception");
- create_insn (0X80315E04);
- create_insn (0X80315E80);
- set_name (0X80315E80, "irq_a32_exception");
- create_insn (0X80315E84);
- create_insn (0X80315F00);
- set_name (0X80315F00, "fiq_a32_exception");
- create_insn (0X80315F04);
- create_insn (0X80315F80);
- set_name (0X80315F80, "serror_a32_exception");
- create_insn (0X80315F84);
- set_name (0X80315F84, "synch_spx_exception_impl");
- create_dword (0X80315FB4);
- create_qword (0X80315FB8);
- create_qword (0X80315FC0);
- create_qword (0X80315FC8);
- create_qword (0X80315FD0);
- create_insn (x=0X80315FD8);
- op_stkvar (x, 1);
- set_name (0X80315FD8, "kernelldr_relocate_kernel_physically");
- create_insn (x=0X80315FDC);
- op_stkvar (x, 1);
- create_insn (x=0X80315FE0);
- op_stkvar (x, 1);
- set_cmt (0X80315FEC, "b", 0);
- create_insn (x=0X80316028);
- op_stkvar (x, 1);
- create_insn (x=0X8031602C);
- op_stkvar (x, 1);
- create_insn (x=0X80316030);
- op_stkvar (x, 1);
- create_insn (0X80316038);
- set_name (0X80316038, "kernelldr_map_initial_identity_mapping");
- create_insn (x=0X8031603C);
- op_stkvar (x, 1);
- create_insn (x=0X80316040);
- op_stkvar (x, 1);
- create_insn (x=0X80316044);
- op_stkvar (x, 1);
- create_insn (x=0X80316048);
- op_stkvar (x, 1);
- create_insn (x=0X8031604C);
- op_stkvar (x, 1);
- create_insn (x=0X80316084);
- op_stkvar (x, 1);
- set_cmt (0X80316094, "this", 0);
- create_insn (x=0X80316094);
- op_stkvar (x, 1);
- set_cmt (0X8031609C, "attribute", 0);
- create_insn (x=0X803160A0);
- op_stkvar (x, 1);
- set_cmt (0X803160A4, "address", 0);
- set_cmt (0X803160A8, "size", 0);
- create_insn (x=0X803160AC);
- op_stkvar (x, 1);
- set_cmt (0X803160B0, "phys_address", 0);
- set_cmt (0X803160B4, "allocator", 0);
- create_insn (x=0X803160BC);
- op_stkvar (x, 1);
- create_insn (x=0X803160C0);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X803160C4);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X803160C8);
- op_hex (x, 1);
- create_insn (x=0X803160CC);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X803160D0);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X803160D8);
- op_hex (x, 1);
- set_cmt (0X803160DC, "size", 0);
- set_cmt (0X803160E0, "this", 0);
- create_insn (x=0X803160E0);
- op_stkvar (x, 1);
- set_cmt (0X803160E4, "attribute", 0);
- set_cmt (0X803160E8, "phys_address", 0);
- set_cmt (0X803160EC, "allocator", 0);
- set_cmt (0X803160FC, "this", 0);
- create_insn (x=0X803160FC);
- op_stkvar (x, 1);
- set_cmt (0X80316100, "attribute", 0);
- set_cmt (0X80316104, "address", 0);
- create_insn (x=0X80316108);
- op_stkvar (x, 1);
- set_cmt (0X8031610C, "size", 0);
- set_cmt (0X80316110, "phys_address", 0);
- set_cmt (0X80316114, "allocator", 0);
- create_insn (x=0X8031611C);
- op_stkvar (x, 1);
- set_cmt (0X80316148, "a1", 0);
- create_insn (x=0X80316150);
- op_hex (x, 1);
- create_insn (x=0X80316170);
- op_hex (x, 1);
- create_insn (0X803161CC);
- create_insn (x=0X80316254);
- op_hex (x, 1);
- create_insn (x=0X803162B0);
- op_hex (x, 1);
- create_insn (x=0X803162D8);
- op_hex (x, 1);
- create_insn (x=0X8031635C);
- op_hex (x, 1);
- create_insn (x=0X803163E0);
- op_stkvar (x, 1);
- create_insn (x=0X803163E4);
- op_stkvar (x, 1);
- create_insn (x=0X803163E8);
- op_stkvar (x, 1);
- create_insn (x=0X803163EC);
- op_stkvar (x, 1);
- create_insn (x=0X803163F0);
- op_stkvar (x, 1);
- create_insn (0X803163FC);
- set_name (0X803163FC, "KInitialPageTable::Map");
- create_insn (x=0X80316400);
- op_stkvar (x, 1);
- create_insn (x=0X80316404);
- op_stkvar (x, 1);
- create_insn (x=0X80316408);
- op_stkvar (x, 1);
- create_insn (x=0X8031640C);
- op_stkvar (x, 1);
- create_insn (x=0X80316410);
- op_stkvar (x, 1);
- create_insn (x=0X80316414);
- op_stkvar (x, 1);
- create_insn (x=0X80316430);
- op_hex (x, 1);
- create_insn (0X8031643C);
- create_insn (x=0X8031645C);
- op_hex (x, 1);
- create_insn (x=0X80316460);
- op_stkvar (x, 1);
- create_insn (x=0X80316470);
- op_hex (x, 1);
- create_insn (x=0X8031648C);
- op_hex (x, 1);
- create_insn (x=0X803164B4);
- op_stkvar (x, 1);
- create_insn (x=0X803164D8);
- op_hex (x, 1);
- create_insn (x=0X803164E4);
- op_hex (x, 1);
- create_insn (x=0X803164EC);
- op_hex (x, 1);
- create_insn (x=0X803164FC);
- op_hex (x, 1);
- create_insn (x=0X80316524);
- op_stkvar (x, 1);
- create_insn (x=0X80316544);
- op_hex (x, 1);
- create_insn (x=0X80316550);
- op_hex (x, 1);
- create_insn (x=0X80316564);
- op_hex (x, 1);
- create_insn (0X80316580);
- create_insn (x=0X80316588);
- op_hex (x, 1);
- create_insn (x=0X80316598);
- op_hex (x, 1);
- create_insn (0X803165C0);
- create_insn (x=0X803165C8);
- op_hex (x, 1);
- create_insn (0X80316744);
- create_insn (x=0X8031674C);
- op_hex (x, 1);
- create_insn (x=0X80316760);
- op_hex (x, 1);
- create_insn (0X8031677C);
- create_insn (x=0X80316784);
- op_hex (x, 1);
- create_insn (x=0X803168E0);
- op_stkvar (x, 1);
- create_insn (x=0X803168E4);
- op_stkvar (x, 1);
- create_insn (x=0X803168E8);
- op_stkvar (x, 1);
- create_insn (x=0X803168EC);
- op_stkvar (x, 1);
- create_insn (x=0X803168F0);
- op_stkvar (x, 1);
- create_insn (x=0X803168F4);
- op_stkvar (x, 1);
- create_insn (x=0X80316900);
- op_stkvar (x, 1);
- set_name (0X80316900, "kernelldr_generate_random_range");
- create_insn (x=0X80316904);
- op_stkvar (x, 1);
- create_insn (x=0X80316960);
- op_stkvar (x, 1);
- create_insn (x=0X80316964);
- op_stkvar (x, 1);
- create_insn (x=0X8031696C);
- op_stkvar (x, 1);
- set_name (0X8031696C, "kernelldr_should_reserve_additional_kernel_data");
- create_insn (x=0X803169AC);
- op_stkvar (x, 1);
- create_insn (x=0X803169B4);
- op_stkvar (x, 1);
- set_name (0X803169B4, "kernelldr_get_adjusted_kernel_physical_base");
- create_insn (x=0X803169B8);
- op_stkvar (x, 1);
- create_insn (x=0X80316A70);
- op_stkvar (x, 1);
- create_insn (x=0X80316A74);
- op_stkvar (x, 1);
- create_insn (x=0X80316A7C);
- op_stkvar (x, 1);
- set_name (0X80316A7C, "kernelldr_libc_init_array");
- create_insn (x=0X80316A80);
- op_stkvar (x, 1);
- create_insn (x=0X80316A88);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80316A8C);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80316A90);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80316A94);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80316AA0);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80316AA4);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80316AB8);
- op_stkvar (x, 1);
- create_insn (x=0X80316ABC);
- op_stkvar (x, 1);
- create_insn (0X80316AC4);
- set_name (0X80316AC4, "kernelldr_load_kernel");
- create_insn (x=0X80316AC8);
- op_stkvar (x, 1);
- create_insn (x=0X80316ACC);
- op_stkvar (x, 1);
- create_insn (x=0X80316AD0);
- op_stkvar (x, 1);
- create_insn (x=0X80316AD4);
- op_stkvar (x, 1);
- create_insn (x=0X80316AD8);
- op_stkvar (x, 1);
- create_insn (x=0X80316ADC);
- op_stkvar (x, 1);
- create_insn (x=0X80316AE8);
- op_stkvar (x, 1);
- create_insn (x=0X80316AEC);
- op_stkvar (x, 1);
- set_cmt (0X80316AF0, "p_kernel_base", 0);
- create_insn (x=0X80316AF0);
- op_stkvar (x, 1);
- set_cmt (0X80316AF4, "p_kernel_map", 0);
- create_insn (x=0X80316AF4);
- op_stkvar (x, 1);
- create_insn (x=0X80316AF8);
- op_stkvar (x, 1);
- create_insn (x=0X80316B00);
- op_stkvar (x, 1);
- create_insn (x=0X80316B04);
- op_hex (x, 1);
- create_insn (x=0X80316B10);
- op_stkvar (x, 1);
- create_insn (x=0X80316B18);
- op_hex (x, 1);
- create_insn (0X80316B24);
- create_insn (x=0X80316B28);
- op_hex (x, 1);
- create_insn (0X80316B34);
- create_insn (x=0X80316B38);
- op_hex (x, 1);
- create_insn (0X80316B44);
- create_insn (x=0X80316B48);
- op_hex (x, 1);
- create_insn (0X80316B54);
- create_insn (x=0X80316B58);
- op_hex (x, 1);
- create_insn (0X80316B64);
- create_insn (x=0X80316B68);
- op_hex (x, 1);
- create_insn (0X80316B74);
- create_insn (x=0X80316B78);
- op_stkvar (x, 1);
- create_insn (x=0X80316B80);
- op_stkvar (x, 1);
- create_insn (x=0X80316B88);
- op_stkvar (x, 1);
- create_insn (x=0X80316B9C);
- op_hex (x, 1);
- create_insn (x=0X80316BA0);
- op_stkvar (x, 1);
- create_insn (0X80316BEC);
- create_insn (x=0X80316BF0);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80316BF4);
- create_insn (x=0X80316BFC);
- op_plain_offset (x, 1, 0X80317E80);
- op_plain_offset (x, 129, 0X80317E80);
- create_insn (x=0X80316C14);
- op_stkvar (x, 1);
- set_cmt (0X80316C20, "ttbr1_page_table", 0);
- create_insn (x=0X80316C20);
- op_stkvar (x, 1);
- set_cmt (0X80316C24, "kernel_base", 0);
- set_cmt (0X80316C28, "kernel_size", 0);
- set_cmt (0X80316C2C, "page_tables_base", 0);
- create_insn (x=0X80316C30);
- op_stkvar (x, 1);
- set_cmt (0X80316C34, "page_tables_size", 0);
- set_cmt (0X80316C38, "allocator", 0);
- create_insn (x=0X80316C40);
- op_hex (x, 1);
- create_insn (x=0X80316C50);
- op_hex (x, 1);
- set_cmt (0X80316C54, "_QWORD", 0);
- set_cmt (0X80316C58, "_QWORD", 0);
- create_insn (x=0X80316C60);
- op_hex (x, 1);
- create_insn (x=0X80316C7C);
- op_stkvar (x, 1);
- create_insn (x=0X80316C80);
- op_stkvar (x, 1);
- create_insn (x=0X80316CA0);
- op_hex (x, 1);
- create_insn (x=0X80316CC0);
- op_hex (x, 1);
- create_insn (x=0X80316CD0);
- op_hex (x, 1);
- create_insn (x=0X80316CF0);
- op_hex (x, 1);
- create_insn (x=0X80316D08);
- op_hex (x, 1);
- set_cmt (0X80316D24, "size", 0);
- set_cmt (0X80316D30, "phys_address", 0);
- create_insn (x=0X80316D34);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80316D38);
- create_insn (x=0X80316D40);
- op_stkvar (x, 1);
- set_cmt (0X80316D44, "this", 0);
- create_insn (x=0X80316D44);
- op_stkvar (x, 1);
- set_cmt (0X80316D48, "attribute", 0);
- create_insn (x=0X80316D48);
- op_stkvar (x, 1);
- set_cmt (0X80316D4C, "address", 0);
- set_cmt (0X80316D50, "allocator", 0);
- set_cmt (0X80316D60, "phys_address", 0);
- create_insn (x=0X80316D6C);
- op_stkvar (x, 1);
- set_cmt (0X80316D70, "this", 0);
- create_insn (x=0X80316D70);
- op_stkvar (x, 1);
- set_cmt (0X80316D74, "attribute", 0);
- create_insn (x=0X80316D74);
- op_stkvar (x, 1);
- set_cmt (0X80316D78, "address", 0);
- set_cmt (0X80316D7C, "size", 0);
- set_cmt (0X80316D80, "allocator", 0);
- set_cmt (0X80316D88, "address", 0);
- set_cmt (0X80316D8C, "size", 0);
- set_cmt (0X80316D90, "phys_address", 0);
- set_cmt (0X80316D94, "this", 0);
- create_insn (x=0X80316D94);
- op_stkvar (x, 1);
- set_cmt (0X80316D98, "attribute", 0);
- create_insn (x=0X80316D98);
- op_stkvar (x, 1);
- create_insn (x=0X80316D9C);
- op_stkvar (x, 1);
- set_cmt (0X80316DA0, "allocator", 0);
- create_insn (x=0X80316DA8);
- op_stkvar (x, 1);
- create_insn (x=0X80316DBC);
- op_stkvar (x, 1);
- set_cmt (0X80316DC0, "dynamic", 0);
- set_cmt (0X80316DC4, "base_address", 0);
- set_cmt (0X80316DCC, "this", 0);
- create_insn (x=0X80316DCC);
- op_stkvar (x, 1);
- set_cmt (0X80316DD0, "address", 0);
- set_cmt (0X80316DD4, "size", 0);
- create_insn (x=0X80316DDC);
- op_stkvar (x, 1);
- create_insn (x=0X80316DE4);
- op_stkvar (x, 1);
- create_insn (x=0X80316E08);
- op_stkvar (x, 1);
- create_insn (x=0X80316E0C);
- op_stkvar (x, 1);
- create_insn (x=0X80316E10);
- op_stkvar (x, 1);
- create_insn (x=0X80316E14);
- op_stkvar (x, 1);
- create_insn (x=0X80316E18);
- op_stkvar (x, 1);
- create_insn (x=0X80316E1C);
- op_stkvar (x, 1);
- create_insn (x=0X80316E28);
- op_stkvar (x, 1);
- set_name (0X80316E28, "KInitialPageTable::ReprotectToReadOnly");
- create_insn (x=0X80316E2C);
- op_stkvar (x, 1);
- create_insn (x=0X80316E30);
- op_stkvar (x, 1);
- create_insn (x=0X80316E34);
- op_stkvar (x, 1);
- create_insn (x=0X80316E38);
- op_stkvar (x, 1);
- create_insn (x=0X80316E3C);
- op_stkvar (x, 1);
- create_insn (x=0X80316E48);
- op_hex (x, 1);
- create_insn (0X80316E54);
- create_insn (x=0X80316E9C);
- op_hex (x, 1);
- create_insn (x=0X80316EB0);
- op_hex (x, 1);
- create_insn (x=0X80316ECC);
- op_hex (x, 1);
- create_insn (x=0X80316EDC);
- op_hex (x, 1);
- create_insn (x=0X80316EE4);
- op_hex (x, 1);
- create_insn (0X80317100);
- create_insn (x=0X80317108);
- op_hex (x, 1);
- create_insn (x=0X80317110);
- op_hex (x, 1);
- create_insn (x=0X80317158);
- op_hex (x, 1);
- create_insn (x=0X8031716C);
- op_hex (x, 1);
- create_insn (x=0X80317184);
- op_hex (x, 1);
- create_insn (x=0X80317194);
- op_hex (x, 1);
- create_insn (x=0X8031719C);
- op_hex (x, 1);
- create_insn (0X803173B8);
- create_insn (x=0X803173C0);
- op_hex (x, 1);
- create_insn (x=0X803173C8);
- op_hex (x, 1);
- create_insn (0X80317404);
- create_insn (x=0X80317408);
- op_hex (x, 1);
- create_insn (x=0X80317410);
- op_hex (x, 1);
- create_insn (x=0X80317454);
- op_stkvar (x, 1);
- create_insn (x=0X80317458);
- op_stkvar (x, 1);
- create_insn (x=0X8031745C);
- op_stkvar (x, 1);
- create_insn (x=0X80317460);
- op_stkvar (x, 1);
- create_insn (x=0X80317464);
- op_stkvar (x, 1);
- create_insn (x=0X80317468);
- op_stkvar (x, 1);
- create_insn (0X80317470);
- create_insn (0X80317474);
- create_insn (0X80317478);
- create_insn (0X8031747C);
- create_insn (0X80317480);
- create_insn (0X80317484);
- create_insn (0X80317488);
- create_insn (0X8031748C);
- create_insn (0X80317490);
- create_insn (0X80317494);
- create_insn (0X80317498);
- create_insn (0X8031749C);
- create_insn (x=0X803174A0);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- set_name (0X803174A0, "kernelldr_finalize_initial_page_allocator");
- create_insn (x=0X803174A4);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X803174A8);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X803174B0);
- op_stkvar (x, 1);
- set_name (0X803174B0, "KInitialPageAllocator::Allocate");
- create_insn (x=0X803174B4);
- op_stkvar (x, 1);
- create_insn (x=0X803174DC);
- op_stkvar (x, 1);
- create_insn (x=0X803174E4);
- op_stkvar (x, 1);
- create_insn (0X803174EC);
- create_insn (0X803174F0);
- set_name (0X803174F0, "KInitialPageAllocator::Free");
- create_insn (0X803174F4);
- set_name (0X803174F4, "kernelldr_apply_relocations");
- create_insn (x=0X80317520);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- create_insn (x=0X80317524);
- set_cmt (0X80317538, "jumptable 0000000080317554 cases 1-6,8,10-16,18", 1);
- create_insn (0X80317538);
- create_insn (x=0X80317548);
- op_plain_offset (x, 1, 0);
- op_plain_offset (x, 129, 0);
- set_cmt (0X80317554, "switch 20 cases ", 0);
- set_cmt (0X80317558, "jumptable 0000000080317554 case 7", 1);
- create_insn (0X80317558);
- set_cmt (0X8031756C, "jumptable 0000000080317554 default case", 1);
- set_cmt (0X80317590, "jumptable 0000000080317554 case 9", 1);
- create_insn (0X80317590);
- set_cmt (0X803175A4, "jumptable 0000000080317554 case 17", 1);
- create_insn (0X803175A4);
- set_cmt (0X803175BC, "jumptable 0000000080317554 case 19", 1);
- create_insn (0X803175BC);
- create_insn (0X803175D0);
- set_cmt (0X803175D8, "jumptable 0000000080317554 case 0", 1);
- create_insn (0X803175D8);
- create_insn (0X80317644);
- create_insn (0X80317648);
- make_array (0X8031764C, 0X4);
- create_insn (x=0X80317650);
- op_stkvar (x, 1);
- set_name (0X80317650, "memmove");
- create_insn (x=0X80317654);
- op_stkvar (x, 1);
- create_insn (x=0X80317684);
- op_hex (x, 1);
- create_insn (0X803176B0);
- create_insn (x=0X803176B8);
- op_stkvar (x, 1);
- create_insn (x=0X803176C0);
- op_stkvar (x, 1);
- create_insn (0X803176C8);
- create_insn (x=0X803176EC);
- op_stkvar (x, 1);
- create_insn (x=0X803176F4);
- op_stkvar (x, 1);
- create_insn (x=0X803176FC);
- op_hex (x, 1);
- create_insn (x=0X80317714);
- op_hex (x, 1);
- create_insn (x=0X8031773C);
- op_hex (x, 1);
- create_insn (x=0X80317748);
- op_hex (x, 1);
- create_insn (x=0X8031776C);
- op_hex (x, 1);
- create_insn (0X8031777C);
- create_insn (0X803177AC);
- create_insn (0X803177B8);
- set_name (0X803177B8, "memset");
- create_insn (x=0X803177FC);
- op_hex (x, 1);
- create_insn (x=0X80317804);
- op_hex (x, 1);
- create_insn (x=0X80317814);
- op_hex (x, 1);
- create_insn (x=0X8031783C);
- op_hex (x, 1);
- create_insn (x=0X80317844);
- op_hex (x, 1);
- create_insn (0X80317888);
- set_name (0X80317888, "memcpy");
- create_insn (x=0X8031788C);
- op_hex (x, 1);
- create_insn (x=0X803178A8);
- op_hex (x, 1);
- create_insn (x=0X803178B0);
- op_hex (x, 1);
- create_insn (x=0X803178F4);
- op_hex (x, 1);
- create_insn (0X80317968);
- create_insn (x=0X8031796C);
- op_hex (x, 1);
- create_insn (0X803179B4);
- create_insn (0X803179F8);
- create_insn (x=0X80317A04);
- op_hex (x, 1);
- create_insn (0X80317B7C);
- create_insn (x=0X80317B94);
- op_hex (x, 1);
- make_array (0X80317BEC, 0X4);
- set_cmt (0X80317D19, "jump table for switch statement", 0);
- create_byte (0X80317D19);
- make_array (0X80317D19, 0X14);
- create_qword (x=0X80317E60);
- op_plain_offset (x, 0, 0);
- op_plain_offset (x, 128, 0);
- create_qword (x=0X80317E68);
- op_plain_offset (x, 0, 0);
- op_plain_offset (x, 128, 0);
- create_qword (x=0X80317E70);
- op_plain_offset (x, 0, 0);
- op_plain_offset (x, 128, 0);
- create_qword (x=0X80317E78);
- op_plain_offset (x, 0, 0);
- op_plain_offset (x, 128, 0);
- MakeStruct (0X80317E80, "KInitialPageAllocator");
- set_name (0X80317E80, "g_InitialPageAllocator");
- make_array (0X80317E90, 0X10);
- create_qword (x=0X80317EA0);
- op_plain_offset (x, 0, 0);
- op_plain_offset (x, 128, 0);
- set_name (0X80317EA0, "KInitialPageAllocator::vtable");
- create_qword (x=0X80317EA8);
- op_plain_offset (x, 0, 0);
- op_plain_offset (x, 128, 0);
- create_qword (0X80317EB0);
- }
- static Functions_0(void) {
- add_func (0X80315000,0X80315094);
- set_func_flags(0X80315000,0x400);
- SetType(0X80315000, "void __fastcall kernelldr_main(_QWORD kernel_base_address, KernelMap *kernel_map, _QWORD ini1_base_address);");
- set_frame_size(0X80315000, 0X20, 0, 0);
- define_local_var(0X80315000, 0X80315094, "[bp-0X10]", "ini1_base_address");
- add_func (0X80315094,0X803150C0);
- set_func_flags(0X80315094,0x400);
- SetType(0X80315094, "__int64 __fastcall kernelldr_save_tpidr_registers(_QWORD *a1);");
- set_frame_size(0X80315094, 0, 0, 0);
- add_func (0X803150C0,0X803150D4);
- set_func_flags(0X803150C0,0x400);
- add_func (0X80315800,0X80315804);
- set_func_flags(0X80315800,0x401);
- SetType(0X80315800, "void __fastcall synch_sp0_exception();");
- add_func (0X80315880,0X80315884);
- set_func_flags(0X80315880,0x401);
- add_func (0X80315900,0X80315904);
- set_func_flags(0X80315900,0x401);
- add_func (0X80315980,0X80315984);
- set_func_flags(0X80315980,0x401);
- add_func (0X80315A00,0X80315A04);
- set_func_flags(0X80315A00,0x480);
- add_func (0X80315A80,0X80315A84);
- set_func_flags(0X80315A80,0x401);
- add_func (0X80315B00,0X80315B04);
- set_func_flags(0X80315B00,0x401);
- add_func (0X80315B80,0X80315B84);
- set_func_flags(0X80315B80,0x401);
- add_func (0X80315C00,0X80315C04);
- set_func_flags(0X80315C00,0x401);
- add_func (0X80315C80,0X80315C84);
- set_func_flags(0X80315C80,0x401);
- add_func (0X80315D00,0X80315D04);
- set_func_flags(0X80315D00,0x401);
- add_func (0X80315D80,0X80315D84);
- set_func_flags(0X80315D80,0x401);
- add_func (0X80315E00,0X80315E04);
- set_func_flags(0X80315E00,0x401);
- add_func (0X80315E80,0X80315E84);
- set_func_flags(0X80315E80,0x401);
- add_func (0X80315F00,0X80315F04);
- set_func_flags(0X80315F00,0x401);
- add_func (0X80315F80,0X80315F84);
- set_func_flags(0X80315F80,0x401);
- add_func (0X80315F84,0X80315FB4);
- set_func_flags(0X80315F84,0x400);
- add_func (0X80315FD8,0X80316038);
- set_func_flags(0X80315FD8,0x410);
- SetType(0X80315FD8, "__int64 __fastcall kernelldr_relocate_kernel_physically(_QWORD *p_kernel_base, KernelMap **p_kernel_map);");
- set_frame_size(0X80315FD8, 0X20, 16, 0);
- add_func (0X80316038,0X803163FC);
- set_func_flags(0X80316038,0x410);
- SetType(0X80316038, "void __cdecl kernelldr_map_initial_identity_mapping(KInitialPageTable *ttbr1_page_table, _QWORD kernel_base, _QWORD kernel_size, _QWORD page_tables_base, _QWORD page_tables_size, KInitialPageAllocator *allocator);");
- set_frame_size(0X80316038, 0XC0, 16, 0);
- define_local_var(0X80316038, 0X803163FC, "[bp-0XC0]", "attr");
- define_local_var(0X80316038, 0X803163FC, "[bp-0X50]", "ttbr0_page_table");
- add_func (0X803163FC,0X80316900);
- set_func_flags(0X803163FC,0x410);
- SetType(0X803163FC, "void __fastcall KInitialPageTable__Map(KInitialPageTable *this, _QWORD address, _QWORD size, _QWORD phys_address, const _QWORD *attribute, KInitialPageAllocator *allocator);");
- set_frame_size(0X803163FC, 0X60, 16, 0);
- add_func (0X80316900,0X8031696C);
- set_func_flags(0X80316900,0x400);
- SetType(0X80316900, "_QWORD __cdecl kernelldr_generate_random_range(_QWORD, _QWORD);");
- set_frame_size(0X80316900, 0X20, 0, 0);
- add_func (0X8031696C,0X803169B4);
- set_func_flags(0X8031696C,0x400);
- SetType(0X8031696C, "bool __fastcall kernelldr_should_reserve_additional_kernel_data();");
- set_frame_size(0X8031696C, 0X10, 0, 0);
- add_func (0X803169B4,0X80316A7C);
- set_func_flags(0X803169B4,0x400);
- SetType(0X803169B4, "_QWORD __cdecl kernelldr_get_adjusted_kernel_physical_base(_QWORD b);");
- set_frame_size(0X803169B4, 0X20, 0, 0);
- add_func (0X80316A7C,0X80316AC4);
- set_func_flags(0X80316A7C,0x410);
- SetType(0X80316A7C, "void __cdecl kernelldr_libc_init_array();");
- set_frame_size(0X80316A7C, 0X10, 16, 0);
- add_func (0X80316AC4,0X80316E28);
- set_func_flags(0X80316AC4,0x410);
- SetType(0X80316AC4, "_QWORD __fastcall kernelldr_load_kernel(_QWORD kernel_base_address, KernelMap *kernel_map, _QWORD ini1_base_address);");
- set_frame_size(0X80316AC4, 0XA0, 16, 0);
- define_local_var(0X80316AC4, 0X80316E28, "[bp-0XA0]", "bss_offset");
- define_local_var(0X80316AC4, 0X80316E28, "[bp-0X98]", "dynamic_end_offset");
- define_local_var(0X80316AC4, 0X80316E28, "[bp-0X90]", "init_array_end_offset");
- define_local_var(0X80316AC4, 0X80316E28, "[bp-0X88]", "init_array_offset");
- define_local_var(0X80316AC4, 0X80316E28, "[bp-0X80]", "ttbr1_page_table");
- define_local_var(0X80316AC4, 0X80316E28, "[bp-0X68]", "a2");
- define_local_var(0X80316AC4, 0X80316E28, "[bp-0X60]", "a1");
- define_local_var(0X80316AC4, 0X80316E28, "[bp-0X58]", "attribute");
- add_func (0X80316E28,0X803174A0);
- set_func_flags(0X80316E28,0x400);
- SetType(0X80316E28, "void __cdecl KInitialPageTable__ReprotectToReadOnly(KInitialPageTable *this, _QWORD address, _QWORD size);");
- set_frame_size(0X80316E28, 0X60, 0, 0);
- add_func (0X803174A0,0X803174B0);
- set_func_flags(0X803174A0,0x400);
- add_func (0X803174B0,0X803174F0);
- set_func_flags(0X803174B0,0x410);
- SetType(0X803174B0, "__int64 __fastcall KInitialPageAllocator__Allocate(KInitialPageAllocator *this);");
- set_frame_size(0X803174B0, 0X10, 16, 0);
- add_func (0X803174F0,0X803174F4);
- set_func_flags(0X803174F0,0x440);
- add_func (0X803174F4,0X8031764C);
- set_func_flags(0X803174F4,0x400);
- SetType(0X803174F4, "__int64 __cdecl kernelldr_apply_relocations(_QWORD base_address, _DWORD *dynamic);");
- add_func (0X80317650,0X803177B8);
- set_func_flags(0X80317650,0x410);
- set_frame_size(0X80317650, 0X10, 16, 0);
- add_func (0X803177B8,0X80317888);
- set_func_flags(0X803177B8,0x400);
- add_func (0X80317888,0X80317BEC);
- set_func_flags(0X80317888,0x400);
- }
- //------------------------------------------------------------------------
- // Information about functions
- static Functions(void) {
- Functions_0();
- }
- //------------------------------------------------------------------------
- // Information about segment registers
- static SegRegs(void) {
- split_sreg_range(0X80315000,"T",0,3);
- split_sreg_range(0X80317BEC,"T",0,3);
- split_sreg_range(0X80317BF0,"T",0,3);
- split_sreg_range(0X80317C98,"T",0,3);
- split_sreg_range(0X80317CD0,"T",0,3);
- split_sreg_range(0X80317D18,"T",0,3);
- split_sreg_range(0X80317D19,"T",0,3);
- split_sreg_range(0X80317D30,"T",0,3);
- split_sreg_range(0X80317E00,"T",0,3);
- split_sreg_range(0X80317E80,"T",0,3);
- split_sreg_range(0X80317EB0,"T",0,3);
- split_sreg_range(0X80319008,"T",0,3);
- split_sreg_range(0X80315000,"DS",0,3);
- split_sreg_range(0X80317BEC,"DS",0,3);
- split_sreg_range(0X80317BF0,"DS",0,3);
- split_sreg_range(0X80317C98,"DS",0,3);
- split_sreg_range(0X80317CD0,"DS",0,3);
- split_sreg_range(0X80317D18,"DS",0,3);
- split_sreg_range(0X80317D19,"DS",0,3);
- split_sreg_range(0X80317D30,"DS",0,3);
- split_sreg_range(0X80317E00,"DS",0,3);
- split_sreg_range(0X80317E80,"DS",0,3);
- split_sreg_range(0X80317EB0,"DS",0,3);
- split_sreg_range(0X80319008,"DS",0,3);
- }
- //------------------------------------------------------------------------
- // Information about all patched bytes:
- static Patches(void) {
- }
- //------------------------------------------------------------------------
- // Call all byte feature functions:
- static Bytes(void) {
- Bytes_0();
- end_type_updating(UTP_STRUCT);
- }
- // End of file.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement