Untitled
By: a guest | Feb 9th, 2010 | Syntax:
None | Size: 1.41 KB | Hits: 16 | Expires: Never
// ida xref call info dumper
#include "idc.idc"
static GetRegisterValue( ea, name )
{
auto p1, opname, loop, optype, opvalue, stroffset;
opname = "";
p1 = ea;
loop = 0;
while( opname != name )
{
p1 = PrevHead( p1, 0 );
opname = GetOpnd( p1, 0 );
loop = loop+1;
if (loop > 100)
{
Message("safe loop");
return "unk";
}
}
optype = GetOpType( p1, 1 );
//Message("optype: %d ", optype);
// this type needs some extra work
if (optype == 2)
{
opvalue = GetOpnd( p1, 1 );
stroffset = strstr( opvalue, "=0x");
return substr( opvalue, stroffset + 3, strlen(opvalue));
}
return ltoa( GetOperandValue( p1, 1 ), 16);
}
static main() {
auto ea,flag,x,y;
auto functname;
flag = 1;
ea = ScreenEA();
// currently used for remote rpc calls but it can be used for everything
Message( "\ncall prog proc msg\n");
for ( x=RfirstB( ea ); x != BADADDR; x=RnextB(ea,x) )
{
functname = GetFunctionName( x );
// normal operation
//Message( "%-75.75s", functname );
//Message( GetRegisterValue(x, "R1") + " " + GetRegisterValue(x, "R3") + " " + GetRegisterValue(x, "R2") + "\n");
// generate wiki
Message("| || 0x%-11.11s|| 0x%02s, 0x%s || %s\n", GetRegisterValue(x, "R1"), GetRegisterValue(x, "R3"), GetRegisterValue(x, "R2"), functname);
Message("|-\n");
}
}