{"record":{"id":"4784d5eb0742059b","repo":"NationalSecurityAgency/ghidra","slug":"usage-s-target-str-arch-mach-disassembly-base","errorCode":null,"errorMessage":"Usage: %s target-str, arch, mach, disassembly base-addr (for rel offsets instrs), full-path to Little and Big Elfs, big/little ascii-byte-string up to %d chars\\n","messagePattern":"Usage: (.+?) target-str, arch, mach, disassembly base-addr \\(for rel offsets instrs\\), full-path to Little and Big Elfs, big/little ascii-byte-string up to (.+?) chars\\\\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"GPL/GnuDisassembler/src/gdis/c/disasm_1.c","lineNumber":240,"sourceCode":"int main(int argc, char* argv[]){\n\tstruct disassemble_info DI;\n\tenum bfd_architecture arch;\n\tstruct bfd_arch_info ai;\n\tunsigned long mach;\n\tenum bfd_endian endian;\n\tunsigned int end;\n\tbfd_vma offset;\n\tdisassembler_ftype disassemble_fn;\n\tchar *target = default_target;\n\tbfd *bfdfile;\n\tunsigned long a,m;\n\tchar* byteString;\n\tchar elf_file_location[MAX_ELF_FILE_PATH_LEN];\n\tchar arch_str[256];\n\tchar mach_str[256];\n\n\tif ( argc < 8) {\n\t\tfprintf(stderr, \"Usage: %s target-str, arch, mach, disassembly base-addr (for rel offsets instrs), full-path to Little and Big Elfs, big/little ascii-byte-string up to %d chars\\n\", argv[0], MAX_ASCII_CHAR_BYTE_STRING);\n\t\tlistSupportedArchMachTargets();\n\t\tconst char** archList = bfd_arch_list();\n\t\tconst bfd_arch_info_type* ait;\n\t\twhile(*archList != NULL){\n\t\t\tprintf(\"checking against architecture: %s.\\n\", *archList);\n\t\t\tait = NULL;\n\t\t\tait = bfd_scan_arch(*archList);\n\t\t\tif(ait != NULL){\n\t\t\t\tprintf(\"archname: %s arch: 0x%08X, mach: 0x%08lX.\\n\", ait->arch_name, ait->arch, ait->mach);\n\t\t\t}\n\t\t\tarchList++;\n\t\t}\n\t\treturn(1);\n\t}\n\n\tend = 0x00000000;\n\tendian = (enum bfd_endian) 0x00;\n\tmach = 0x00000000;","sourceCodeStart":222,"sourceCodeEnd":258,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/GPL/GnuDisassembler/src/gdis/c/disasm_1.c#L222-L258","documentation":"GnuDisassembler (gdis) usage error. main() requires at least 8 argv elements: program name, target-str, arch, mach, disassembly base-addr, path to little-endian ELF, path to big-endian ELF, and an ascii hex byte-string. When argc < 8 it prints the Usage line to stderr, lists supported arch/mach targets and all BFD-known architectures, then continues (does not exit at this point).","triggerScenarios":"Invoking the gdis binary with fewer than 7 user arguments (argc < 8). E.g. calling `gdis <target>` without arch, mach, base-addr, and both ELF paths.","commonSituations":"First-time use without reading the argument contract; a wrapper/IDE launcher dropping trailing arguments; missing the dual (little + big endian) ELF path requirement.","solutions":["Supply all 7 arguments in order: target arch mach base-addr little-elf big-elf bytestring.","Run with no/insufficient args intentionally to dump the supported arch/mach list, then re-invoke correctly.","Wrap the binary in a script that validates argc >= 8 before exec.","Check the two ELF file paths exist and the byte-string is within MAX_ASCII_CHAR_BYTE_STRING."],"exampleFix":"// before\n$ gdis i386:x86-64\n\n// after (target arch mach base-addr little-elf big-elf bytes)\n$ gdis \"i386:x86-64\" \"i386\" \"x86-64\" 0x400000 ./prog.le ./prog.be 90909090","handlingStrategy":"validation","validationCode":"if (argc < 8) {\n  fprintf(stderr, \"gdis needs 7 args: target arch mach base-addr le-elf be-elf bytes\\n\");\n  return 2;\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Wrap gdis in a launcher that checks argc >= 8.","Validate file paths and byte-string length before exec.","Run with insufficient args once to capture the supported arch list."],"tags":["cli","disassembler","bfd","argument-parsing","c"],"backgroundTag":null,"analyzedSha":"d5f144c24d6bc53c9cbf4448c6d11143e7696206","analyzedAt":"2026-08-14T01:00:57.564Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}