/* * Process one file. */ int process(const char* fileName) { DexFile* pDexFile = NULL; MemMapping map; bool mapped = false; int result = -1; printf("Processing '%s'...\n", fileName); if (dexOpenAndMap(fileName, gOptions.tempFileName, &map, false) != 0) goto bail; mapped = true; pDexFile = dexFileParse(map.addr, map.length, kDexParseVerifyChecksum | kDexParseContinueOnError); if (pDexFile == NULL) { fprintf(stderr, "ERROR: DEX parse failed\n"); goto bail; } processDexFile(fileName, pDexFile); result = 0; bail: if (mapped) sysReleaseShmem(&map); if (pDexFile != NULL) dexFileFree(pDexFile); return result; }
/* * Process a file. * * Returns 0 on success. */ int process(const char* fileName) { DexFile* pDexFile = NULL; MemMapping map; bool mapped = false; int result = -1; UnzipToFileResult utfr; utfr = dexOpenAndMap(fileName, NULL, &map, true); if (utfr != kUTFRSuccess) { if (utfr == kUTFRNoClassesDex) { /* no classes.dex in the APK; pretend we succeeded */ result = 0; goto bail; } fprintf(stderr, "Unable to process '%s'\n", fileName); goto bail; } mapped = true; pDexFile = dexFileParse((u1*)map.addr, map.length, kDexParseDefault); if (pDexFile == NULL) { fprintf(stderr, "Warning: DEX parse failed for '%s'\n", fileName); goto bail; } printf("#%s\n", fileName); int i; for (i = 0; i < (int) pDexFile->pHeader->classDefsSize; i++) { dumpClass(pDexFile, i); } result = 0; bail: if (mapped) sysReleaseShmem(&map); if (pDexFile != NULL) dexFileFree(pDexFile); return result; }