在 IDA IDC 中隐藏数据区域

逆向工程 艾达
2021-07-09 18:10:13

我正在使用以下 IDC 函数将 RAM 数据和代码部分从打包的二进制文件复制到我的富士通 FR 系统的正确运行时位置:

static idc_memcpy(source, dest, count, desc)
{
    auto i, val;

    SetCharPrm(INF_GENFLAGS, INFFL_LOADIDC|GetCharPrm(INF_GENFLAGS));
    Message("Copy %a: Start\n", dest);

    for(i = 0; i < count; i = i + 2 )
    {
        val = Word(source + i);
        PatchWord(dest + i, val);
    }

    SetCharPrm(INF_GENFLAGS, ~INFFL_LOADIDC&GetCharPrm(INF_GENFLAGS));

    MakeUnknown(source,count,DOUNK_EXPAND+DOUNK_DELNAMES);

    HideArea(source, source+count-1, desc, "", "", -1);
    SetHiddenArea(source, 1 );
    Message("Copy %a: End\n", dest);

}

但是当我转到源地址时,我看到:

ROM:00447E8C ; [0000C878 BYTES: BEGIN OF AREA RAM Data2 Source. PRESS KEYPAD "-" TO COLLAPSE]
ROM:00447E8C unk_447E8C:     .byte 0xFF              ; DATA XREF: Tsk32+176o
ROM:00447E8D                 .byte 0xFF
ROM:00447E8E                 .byte 0xFF
ROM:00447E8F                 .byte 0xFF
ROM:00447E90                 .byte    0
ROM:00447E91                 .byte 0x30 ; 0
ROM:00447E92                 .byte    0
ROM:00447E93                 .byte    0

我希望/期望隐藏该区域,我做错了什么。如果我按键盘,-我会收到错误消息:

IDA 无法以图形模式显示程序。只有属于函数的指令才能以图形模式显示。

1个回答

尝试了很多事情后解决了它。

我不得不将数据区更改为字节数组

    MakeByte(source);
    MakeArray(source, byte_count);

之后MakeUnknown,然后SetHidden用值调用0

同样对于Hiding the Area with keyboard,新的默认键是Ctrl+ -,IDA中显示的文字是错误的。

因此最终代码是:

static idc_memcpy(source, dest, byte_count, desc)
{
    auto i, val;

    SetCharPrm(INF_GENFLAGS, INFFL_LOADIDC|GetCharPrm(INF_GENFLAGS));
    Message("Copy %a: Start\n", dest);

    for(i = 0; i < byte_count; i = i + 2 )
    {
        val = Word(source + i);
        PatchWord(dest + i, val);
    }

    SetCharPrm(INF_GENFLAGS, ~INFFL_LOADIDC&GetCharPrm(INF_GENFLAGS));

    MakeUnknown(source,byte_count,DOUNK_EXPAND+DOUNK_DELNAMES);
    MakeByte(source);
    MakeArray(source, byte_count);

    HideArea(source, source+byte_count, desc, "", "", -1);
    SetHiddenArea(source, 0 );
    Message("Copy %a: End\n", dest);
}