mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-04-18 05:38:36 +01:00
Added BinRep, originally found in Sup1 ISO.
hand copied.
This commit is contained in:
parent
3a629bcdfc
commit
84ce3bb40f
6 changed files with 106 additions and 1 deletions
src
Binary file not shown.
Binary file not shown.
BIN
src/Kernel.BIN.C
BIN
src/Kernel.BIN.C
Binary file not shown.
Binary file not shown.
104
src/Zenith/Utils/BinRep.CC
Executable file
104
src/Zenith/Utils/BinRep.CC
Executable file
|
@ -0,0 +1,104 @@
|
|||
#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 $LK,"Patch Table Generation",A="FF:::/Compiler/CMain.CC,IET_ABS_ADDR"$ and $LK,"Load",A="MN: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;
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
Cd(__DIR__);;
|
||||
#include "BinRep"
|
||||
#include "CPURep"
|
||||
#include "Diff"
|
||||
#include "Find"
|
||||
|
@ -10,7 +11,7 @@ Cd(__DIR__);;
|
|||
#include "Profiler"
|
||||
#include "StrUtils"
|
||||
#include "DocUtils"
|
||||
#include "TaskRep"
|
||||
#include "TaskRep"
|
||||
#include "ToDolDoc"
|
||||
#include "ToTXT"
|
||||
Cd("..");;
|
||||
|
|
Loading…
Reference in a new issue