#help_index "Compiler" DefineListLoad("ST_BIN_FILE_TYPES", "END\0" " \0" "REL_I0\0" "IMM_U0\0" "REL_I8\0" "IMM_U8\0" "REL_I16\0" "IMM_U16\0" "REL_I32\0" "IMM_U32\0" "REL_I64\0" "IMM_U64\0" " \0 \0 \0 \0" "REL32_EXPORT\0" "IMM32_EXPORT\0" "REL64_EXPORT\0" "IMM64_EXPORT\0" "ABS_ADDR\0" "CODE_HEAP\0" "ZEROED_CODE_HEAP\0" "DATA_HEAP\0" "ZEROED_DATA_HEAP\0" "MAIN"); public Bool BinRep(U8 *filename) {//Reports imports, exports, etc for a .BIN file //See Patch Table Generation and Load(). U8 *fbuf, *ptr, *sptr, *absname; I64 i, j, size, etype; Bool res = FALSE; CBinFile *bf; CHashExport *saved_hash_ptr = NULL; fbuf = ExtDefault(filename, "BIN"); if (!(bf = FileRead(fbuf, &size))) goto br_done1; if (bf->bin_signature != BIN_SIGNATURE_VAL) { "Not a CosmiC Binary File.\n"; goto br_done2; } absname = FileNameAbs(fbuf); Free(fbuf); fbuf = StrNew(absname); FileExtRemove(fbuf); if (fbuf[1] == ':' && StrLen(fbuf) > 2) " MODULE_NAME:%s\n", fbuf + 2; else "NO MODULE NAME\n"; if (bf->org != INVALID_PTR) " ORG:%X\n", bf->org; " MODULE_ALIGN:%X\n", 1 << bf->module_align_bits; ptr = bf(U8 *) + bf->patch_table_offset; while (etype = *ptr++) { i = *ptr(U32 *)++; sptr = ptr; ptr += StrLen(sptr) + 1; "$LTCYAN$%16Z:$GREEN$%s$FG$:%X ", etype, "ST_BIN_FILE_TYPES", sptr, i; switch (etype) { case IET_REL_I0 ... IET_IMM_I64: if (*sptr) saved_hash_ptr = HashFind(sptr, Fs->hash_table, HTG_ALL); if (!saved_hash_ptr) "Unresolved Reference:%s\n", sptr; break; case IET_ABS_ADDR: '\n'; for (j = 0; j < i; j++) "%X ", *ptr(U32 *)++; break; case IET_CODE_HEAP: case IET_ZEROED_CODE_HEAP: "Size:%X\n", *ptr(U32 *)++; for (j = 0; j < i; j++) "%X ", *ptr(U32 *)++; break; case IET_DATA_HEAP: case IET_ZEROED_DATA_HEAP: "Size:%X\n", *ptr(I64 *)++; for (j = 0; j < i; j++) "%X ", *ptr(U32 *)++; break; } '\n'; } res = TRUE; Free(absname); br_done2: Free(bf); br_done1: Free(fbuf); return res; }