/* * Parse args. * * I'm not using getopt_long() because we may not have it in libc. */ int main(int argc, char* const argv[]) { bool wantUsage = false; int ic; memset(&gOptions, 0, sizeof(gOptions)); while (1) { ic = getopt(argc, argv, "dfht:"); if (ic < 0) break; switch (ic) { case 'd': // disassemble Dalvik instructions gOptions.disassemble = true; break; case 'f': // dump outer file header gOptions.showFileHeaders = true; break; case 'h': // dump section headers, i.e. all meta-data gOptions.showSectionHeaders = true; break; case 't': // temp file, used when opening compressed Jar gOptions.tempFileName = argv[optind]; break; default: wantUsage = true; break; } } if (optind == argc) { fprintf(stderr, "%s: no file specified\n", gProgName); wantUsage = true; } /* initialize some VM tables */ gInstrWidth = dexCreateInstrWidthTable(); gInstrFormat = dexCreateInstrFormatTable(); if (wantUsage) { usage(); return 2; } while (optind < argc) process(argv[optind++]); free(gInstrWidth); free(gInstrFormat); return 0; }
/* * Initialize some things we need for verification. */ bool dvmVerificationStartup(void) { gDvm.instrWidth = dexCreateInstrWidthTable(); gDvm.instrFormat = dexCreateInstrFormatTable(); gDvm.instrFlags = dexCreateInstrFlagsTable(); if (gDvm.instrWidth == NULL || gDvm.instrFormat == NULL || gDvm.instrFlags == NULL) { LOGE("Unable to create instruction tables\n"); return false; } return true; }