⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _readsym.idc

📁 《加密与解密》随书光盘(三)工具 本书在第一版的基础上,更新了第一版中的过时内容。 本书共分三个部分。 第一部分介绍与加密和解密技术相关的基础知识。 第二部分全面讲述各种最新的软件加密与解密技
💻 IDC
字号:
// _readsym.idc
// This script imports Pentica-B symbol file information
// code by twh, rev 10/04/2000

#include <idc.idc>

// These values for use with Hitachi H8300L (3644F)
#define SEGOFFSET 0x10000
#define IVT_START 0x0000
#define IVT_END   0x002F
#define ROM_START 0x0030
#define ROM_END   0x7FFF
#define RAM_START 0xFB80
#define RAM_END   0xFF7F

static htox(strHex) {
    auto hlt, ea, i, x;

    hlt = "0123456789ABCDEF";
    i = 0;
    ea = 0;

// ignore trailing 'H'
    while (i < (strlen(strHex)-1)) {
        x = strstr(hlt,  substr(strHex, i, i+1));
        ea = (ea * 16) + x;
        i = i + 1;
    }

    return(ea);
}

static GNFToken(InFileH) {
    auto name, t, whitespace;

    whitespace = "\040\012\015";
    name = "";
    t = fgetc(InFileH);
    while ( ( t != -1 ) && ( strstr(whitespace, t) >= 0 ) ) {
        t = fgetc(InFileH);
    }
    while ( t != -1 ) {
        name = name + t;
        t = fgetc(InFileH);
        if ( strstr(whitespace, t) >= 0 )
            break;
    }

    return(name);
}

static GetInputPath() {
    auto p, r, e;

    p = GetInputFilePath();
    r = -1;
    e = strlen( p );
    while ( r < 0 ) {
        e--;
        r = strstr(substr(p, e, -1), "\\");
    }

    return( substr(p, 0, ++e) );
}

static main(void) {
    auto minea, ea, tkn, name;
    auto InFName, InFileH;
    auto errcode;
    auto i, j;

    minea = MinEA();

// browse for an input symbol file name (.sym)
    InFName = AskFile(0, GetInputPath() + "*.sym", "Locate symbol file:");
    InFileH = fopen(InFName, "rb");
    if (InFileH != 0)
    {
        Message("Fixing up segments...\n");

        errcode = SegBounds(SEGOFFSET + ROM_START, SEGOFFSET + ROM_START, SEGOFFSET + ROM_END + 1, 0);
        errcode = SegRename(SEGOFFSET + ROM_START, "ROM");
        errcode = SegCreate(SEGOFFSET + IVT_START, SEGOFFSET + IVT_END + 1, (SEGOFFSET >> 4), 0, saRelPage, scPub);
        errcode = SegRename(SEGOFFSET + IVT_START, "IVT");
        errcode = SegCreate(SEGOFFSET + RAM_START, SEGOFFSET + RAM_END + 1, (SEGOFFSET >> 4), 0, saRelPage, scPub);
        errcode = SegRename(SEGOFFSET + RAM_START, "RAM");

        Message("Beginning import of Hitachi symbols.\n");

// locate tof marker - BEGIN
        tkn = GNFToken(InFileH);
        while ( tkn != "BEGIN" ) {
            tkn = GNFToken(InFileH);
        }

// watch for eof marker - "END"
        tkn = GNFToken(InFileH);
        while ( tkn != "END" ) {

// calculate address from HEX rep
            ea = htox( tkn );

            ea = ea + minea;
// read the name label
            tkn = GNFToken(InFileH);

            name = tkn;
            if (MakeName( ea, "" ) == 0 ) {
                MakeUnkn(ea, 0);
                MakeName( ea, "" );
            }
            if (MakeName( ea, name ) == 0 ) {
                Message("    Address: '" + tkn + "'" + "(%x) ", ea );
                Message("    Label: '" + name);
                Message("    Failed!\n");
            }

            tkn = GNFToken(InFileH);
        }

        Message("Finished importing Hitachi symbols.\n");
        fclose (InFileH);

        for (i = (SEGOFFSET + IVT_START); i < (SEGOFFSET + ROM_START); i = i + 2 ) {
            MakeWord(i);
            OpOff(i,0,SEGOFFSET);
            j = Word( i ) + SEGOFFSET;
            errcode = AddEntryPoint(j,j,"",1);
            MakeCode( j );
            AutoMark( j, AU_PROC );        }

// get Power On Reset vector
        i = Word(SEGOFFSET + IVT_START) + SEGOFFSET;
        Message("Entry point is: %08x\n", i );
        AnalyseArea(i, SEGOFFSET + ROM_END);
        Wait();

    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -