一文解决IDA的IDC脚本语言入门教程

1、IDC语言

1.1 IDC变量

IDC的3种数据类型:整数(IDA文档使用类型名称long)、字符串和浮点值。当然也包括对象、引用和函数指针

1.1.1 局部变量声明

 

1

2

 

auto addr, reg, val; //legal, multiple variables declared with no initializers

auto count = 0; // declaration with initialization

IDC认可使用/**/的C风格多行注释,//的行注释

1.1.2 全局变量声明

 

1

2

3

4

5

6

 

extern outsideGlobal;

static main(){

extern insideGlobal;

outsideGlobal = "Global";

insideGlobal = 1;

}

可以在函数内部或外部声明全部变量,但不能子啊声明变量的时候提供初始值。

1.2 IDC表达式

除了少数几个特例外,IDC几乎支持C的所有算数和逻辑运算符,包括三元运算(?:),但是不支持op=(+=、*=、>>=等)形式的符合赋值运算符。

IDC的字符串运算与C的有所不同。在IDC中,支持类python的字符串复制、拼接、分片操作。

 

1

2

3

 

auto str="String to slice";

auto s1,s2,s3,s4;

s1 = str[7:9];

需要注意的是IDC没有数组数据类型。

1.3 IDC语句

IDC的语句以很好结束。switch语句是IDC唯一不支持的C风格复合语句。在使用for循环的时候,需要记住的是,IDC不支持复合赋值运算符op=。

并且IDC引入了try/catch块和相关的switch语句,在语法上它们类似C++一场处理。

IDC的块中,可以声明新的变量,只要变量声明位于花括号内的第一个语句即可。但是IDC并不严格限制新引入的变量的作用范围,因此,你可以在声明这些变量的花括号以外引用它们。

1.4 IDC函数

IDC仅仅在独立程序(.idc文件)中支持用户定义的函数。iDC命令对话框不支持用户定义的函数。IDC用于声明用户定义的函数的语法与C语言的差异甚大。在IDC中,static关键字用于引入一个用户定义的函数,函数的参数列表仅包含一个以逗号分隔的参数名列表。

 

1

2

3

4

 

static my_func(x, y, z){

auto a,b,c;

......

}

并且参数可以采用传值或者传参的方式。

现在已经可以将函数引用作为一个参数传递给另一个函数,并将函数引用作为函数的返回结果。下面的代码清单说明了使用函数参数和函数作为返回值的情况。

 

1

2

3

4

5

6

7

8

9

10

11

 

static getFunc(){

return Message; //return the built-in Message function as a result

}

static useFunc(func, arg){

func(arg); // func here is expected to be a function reference

}

static main(){

auto f = getFunc();

f("Hello world!\n"); // invoke the returned function f

useFunc(f, "XXS"); // no need for & operato

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AppNinja

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值