IDC编程指南:全局变量声明与IDC表达式运算符详解

外部外部全局;
静态主(){
外部内部全局;
外部全球=“全球”;
内部全局= 1;
您可以在函数内部或外部声明所有变量,但不能在声明变量时提供初始值。
1.2 IDC表达
除少数特殊例外外,IDC几乎支持C的所有计算和逻辑运算符,包括三元计算(?:),但不支持OP=(+=、*=、>>等)符号。
IDC的字符串操作与C不同,在IDC中支持Python字符串复制、拼接、分片操作。
Auto Str = "字符串到切片";
自动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关键字用于引入用户定义的函数。函数的参数列表仅包含以逗号分隔的参数列表。
静态 my_func (x, y, z) {
自动A、B、C;
……
并且参数可以是传参或者参数。
现在它可以作为另一个函数的一个参数来引用,并且函数引用可以作为函数的返回结果来引用。以下代码列表说明了函数参数和函数作为返回值的使用。
10
11
静态 getfunc() {
返回消息; // 返回内置消息函数作为结果
静态 usefunc (func, arg) {{
函数(arg); // Func 这里预计是一个函数引用
静态主(){
auto f = getfunc();
f("你好世界!\N"); // 调用返回函数F
Usefunc(f,“xxs”); // 不需要 & 运算符,函数始终通过引用调用
1.5 IDC对象
IDC定义了一个根类来成为Object。最终所有的类都从它派生出来,并且在创建新类时支持单一继承。 IDC不使用访问描述,例如Public或Private,所有类成员都是有效的公共类。类语句仅包含类成员函数的定义。要在类中创建数据成员,只需创建分配给该数据成员的赋值语句即可。
10
11
12
13
14
15
16
17 号
18
类示例类{
exampleclass(x,y){//构造函数
这个.a = x; / 所有 exampleclass 对象都有数据元 a
这个.b = y; /所有示例类对象都有数据元成员B
~ExampleClass(){//析构函数
富(x){
这个.a = 这个.a + x;
静态主() {
/* ExampleClass EX;*/ // 这不是值压缩
自动 ex = exampleclass(1,2); // 这是对的
例如 foo (10);
ex.z = "字符串"; // 对象 EX 现在有成员 Z,但类没有
1.6 IDC方案
main函数是必需的,并且主程序文件还必须包含IDC.idc文件以获取其包含的有用宏定义。
#include // 有用的包含指令
静态主(){
// 做smedHing
IDC认可的预处理指令
1.7 IDC错误处理
运行IDC脚本时,可能会遇到两种错误:解析错误、运行时错误。
分析错误是指使程序无法运行的错误,包括语法错误、未定义的引用、函数参数个数错误等。
运行时的错误会使脚本立即终止。当然,当脚本运行时间过长时,就会出现错误。
调试IDC脚本非常麻烦。除了大量的输出语句之外,没有其他方法可以调试IDC脚本。
1.8 IDC数据永久存储
前面提到,IDC没有传统意义上的数据,即声明一个大的存储块,然后在数据访问块中使用数据项的数组。不过,IDC确实有一个全局永久数组,可以将其视为一个命名的永久对象,而且这些对象都是稀疏数组。在数组中保存整数值和字符串值时,IDC的全局数组不能存储浮点值。
2.IDC常用功能 2.1 读取和修改数据功能
需要注意的是,我们在做这个操作的时候要考虑顺序。
2.2 用户交互功能 2.3 打击操作功能 2.4 文件输入/输出功能 2.5 操作数据库名称 2.6 处理功能
当然也可以通过函数名使用LockByname函数来查找函数的起始地址
2.7 代码交叉引用功能
每次调用交叉引用函数时,IDA都会设置一个内部IDC状态变量来指出最后一次交叉引用的类型。如果您需要知道收到的交叉引用的类型,那么您必须在调用其他交叉引用查询函数之前调用 XREFTYPE 函数
2.8 数据交叉引用功能
与交叉引用编码一样,如果需要知道收到的交叉引用的类型,那么在调用另一个交叉引用查询函数之前,必须调用 XREFTYPE 函数
2.9 数据库操作功能 2.10 数据库搜索功能
最常见的三个迹象是
search_down 搜索操作 扫描高位地址 search_next 略过当前匹配,扫描下一个匹配 search_case 区分稿件中的两行和文本搜索 2.11 反外汇行组件组件