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 |

1418

被折叠的 条评论
为什么被折叠?



