我有一个带有很多间接调用的二进制文件(call dword ptr [register + offset ]),该寄存器是通过一个简单的数学计算的,我可以自行计算(调用本身会导致根据当前偏移量计算出一些winapi) >每当我尝试对数据使用AddCodeRefs (ins, winapi, XREF_USER | fl_CN/f)时,我的图形就会显示错误,并且所有基本块都变成每个基本块一条指令;当我尝试进行相反操作时,IDA(从逻辑上说:/)认为数据确实是代码,并将所有部分重新解释为垃圾代码。

我的问题是-是否可以创建数据手动从代码中获取外部参照? AddCodeRefs似乎破坏了图表,我找不到任何AddDataRefs,我正在使用IDA 6.4。

评论

也许下次更少的f字也能使您明白吗?

我看到您已经对其进行了编辑,对不起,下一次我会回复/

#1 楼

我认为您可能正在寻找add_dref(long From,long To,long drefType)。 IDA联机帮助对其进行了如下描述:

Data reference types (combine with XREF_USER!):
#define dr_O    1                       // Offset
#define dr_W    2                       // Write
#define dr_R    3                       // Read
#define dr_T    4                       // Text (names in manual operands)
#define dr_I    5                       // Informational

void    add_dref(long From,long To,long drefType);      // Create Data Ref
void    del_dref(long From,long To);    // Unmark Data Ref

long    Dfirst  (long From);            // Get first data xref from 'From'
long    Dnext   (long From,long current);
long    DfirstB (long To);              // Get first data xref to 'To'
long    DnextB  (long To,long current);