// vim: ft=cpp sw=4 ts=4 et /* (C) 2003-2008 Willem Jan Hengeveld * * Web: http://www.xs4all.nl/~itsme/projects/ida/ */ #define UNLOADED_FILE 1 #include // THIS SCRIPT IS NOT FINISHED // attempt to automatically parse resources. // //------------------------------------------------------------------------ // Information about structure types static Structures(void) { auto id; id = AddStrucEx(-1,"struc_resource_directory",0); id = AddStrucEx(-1,"struc_resource_directory_entry",0); id = AddStrucEx(-1,"struc_resource_data_entry",0); id = GetStrucIdByName("struc_resource_directory"); AddStrucMember(id,"characteristics", 0x0, 0x20000400, -1, 4); AddStrucMember(id,"timedatestamp", 0x4, 0x20000400, -1, 4); AddStrucMember(id,"majorversion", 0x8, 0x10000400, -1, 2); AddStrucMember(id,"minorversion", 0xa, 0x10000400, -1, 2); AddStrucMember(id,"NumberOfNamedEntries", 0xc, 0x10000400, -1, 2); AddStrucMember(id,"NumberOfIdEntries", 0xe, 0x10000400, -1, 2); id = GetStrucIdByName("struc_resource_directory_entry"); AddStrucMember(id,"name", 0x0, 0x20000400, -1, 4); AddStrucMember(id,"offsetToData", 0x4, 0x20000400, -1, 4); id = GetStrucIdByName("struc_resource_data_entry"); AddStrucMember(id,"offsetToData", 0x0, 0x20000400, -1, 4); AddStrucMember(id,"size", 0x4, 0x20000400, -1, 4); AddStrucMember(id,"codepage", 0x8, 0x20000400, -1, 4); AddStrucMember(id,"reserved", 0xc, 0x20000400, -1, 4); } // root is a rva, ea is an offset relative to the root. // first call should be ParseResources(..., 0) // levels: // 0 = root : contains type entries // 1 = names: contains id entries // 2 = lang : contains language entries // 3 = data : contains data static ParseResources(root, ea, level) { auto i; auto nrNamed; auto nrId; auto ofs; nrNamed= Word(root+ea+0xc); nrId= Word(root+ea+0xe); ofs= ea+0x10; for (i=0 ; i