From: Michael Gernoth Date: Sat, 31 Jan 2009 22:44:37 +0000 (+0100) Subject: solved the mistrey of 4 unknown bytes, only one left X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/rsbs2/commitdiff_plain/358935b6269b6f0392c87d8653541ab721cc0e70 solved the mistrey of 4 unknown bytes, only one left --- diff --git a/extract.c b/extract.c index 6c30bd2..5d2a6fc 100644 --- a/extract.c +++ b/extract.c @@ -15,8 +15,9 @@ void extract_files(unsigned char *fw, int len) { unsigned char *pos; - unsigned int length; - unsigned char unknown[5]; + unsigned int content_length; + unsigned int name_length; + unsigned char unknown; char *name; pos = fw + 0x28; @@ -25,26 +26,25 @@ void extract_files(unsigned char *fw, int len) pos = fw + *((unsigned int*)pos); while (pos < (fw + len)) { - unknown[0] = *pos; pos++; - unknown[1] = *pos; pos++; - unknown[2] = *pos; pos++; - unknown[3] = *pos; pos++; - unknown[4] = *pos; pos++; - length = *((unsigned int*)pos); + unknown = *pos; pos++; + name_length = *((unsigned int*)pos); + pos += 4; + content_length = *((unsigned int*)pos); pos += 4; name = (char*)pos; - pos += strlen(name) + 1; - if ((pos + length) > (fw + len)) { + if (((pos + content_length) > (fw + len)) || + ((pos + name_length) > (fw + len))) { printf("EOF reached\n"); break; } - printf("%s: unknown: %02x %02x %02x %02x %02x, length: %d", - name, unknown[0], unknown[1], unknown[2], unknown[3], - unknown[4], length); + pos += name_length; + + printf("%s: unknown: 0x%02x, length: %d", + name, unknown, content_length); - if (length > 0) { - write_file(name, pos, length); + if (content_length > 0) { + write_file(name, pos, content_length); if (*((unsigned int*)pos) == LZ_MAGIC) { char *lzname; @@ -80,7 +80,7 @@ void extract_files(unsigned char *fw, int len) } } - pos += length; + pos += content_length; } }