IDC语言为IDA的一种脚本引擎,它之所以叫做IDC是因为它的语法与C语言很相似,这里我参考《IDA Pro权威指南》介绍一些IDC常用的基本语法。
Example1:
auto addr, reg, val; //没有初始化声明的多个变量
auto count = 0; //已声明和初始化
Example2:
extern outsideGlobal;
static main()
{
extern insideGlobal;
outsideGlobal = “Global”;
insideGlobal = 1;
}
Example3:
result = ( x >> 1 ) & 0x7fffffff; //将最大有效位设置为0
关于0x7fffffff :
每个十六进制数为4bit,因此8位16进制是4个字节,刚好是一个int整型,F的二进制码为 1111,7的二进制码为 0111。这样一来,整个整数 0x7FFFFFFF 的二进制表示就是除了首位是 0,其余都是1。也就是说,这是最大的整型数 int(因为第一位是符号位,0 表示他是正数)。
Example4:
auto str = “String to slice”;
auto s1, s2, s3, s4;
s1 = str[7:9]; //'to'
s2 = str[ :6]; //'String'
s3 = str[10: ]; //'slice'
s4 = str[5]; //'g'
Example5:
auto i;
for (i = 0; i < 10; i += 2) {} //不合法,不支持 +=
for (i = 0; i < 10; i = i + 2) {} //合法
Example6:
auto i = 10;
auto j = 20;
Message(“i = %d\n”, i);
Message(“j = %d\n”, j);
Example7:
#include //头文件
static main()
{
//do something fun here
}
1)void PatchByte(long addr , long val) 设置虚拟地址addr处的一个字节值,PatchByte可更换为PatchWord,PatchDword设置虚拟地址addr处的2字节和4字节值。
2)long Byte(long addr) 从虚拟地址addr读取一个字节值,Byte可更换为Word,Dword读取2字节和4字节值。
3)void Message(string format , …),在输出窗口打印一条格式化消息。
4)void print(…),在输出窗口中打印每个参数的字符串表示形式。
5)long atol(string val),将10进制val转化成对应整数值。
6)long xtol(string val),将16进制val转化成对应整数值。
7)long ord(string ch),返回单字符字符串ch的ASCII值。
8)string Name(long addr),返回与给定地址有关的名称,如果该位置没有名称,则返回空字符串。