Сообщение от frostegater
А ты мне из цигвина дай.
|
Ну вот тогда, нашёлся здесь: C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\lib
Кстати, разработчики игры Astonishia ведь как-то ужали так сильно файл в GZ какой-то библиотекой, значит должно ужаться с совместимостью.
Короче, тут дело в сжатии. Он просто не может сжать файл до исходного размера, как он был сжат ранее, поэтому сжимает и потом ищет не среди psp_header по размеру файла 0x28, а по размеру архива из KIRK-заголовков, продублированного в 0x70 в кирке (0xB0 в psp_header):
int get_kirk_size(u8 *key_hdr)
{
int krawSize = *(u32*)(key_hdr+0x70);
if(krawSize % 0x10) {
krawSize += 0x10 - (krawSize % 0x10); // 16 bytes aligned
}
krawSize += 0x110;
return krawSize;
}
krawSize - это и есть размер архива, записанного в kirk_header по адресу 0x70.
Поэтому, даже если размер ELF >= размера в psp_header, то он берёт нужный хедер, но, если после сжатия размер архива не подходит к kirk_header, то он по списку ищет следующий подходящий по размеру среди kirk_header-ов.
Другой вопрос - действительно ли он ищет по порядку в списке или всё-таки из всего списка выбирает наиболее подходящий?