1。IDA脚本的打开与使用:

IDA脚本两种语言:IDC(IDC,本地脚本语言)和Python

2。IDC语言介绍

1。IDC变量:IDC是一种松散的语言,没有明确的类型。使用3中数据类型,整数(IDA文档使用类型名称long)、字符串、浮点值。绝大部分的操作是针对整数和字符串。

因为字符串被视为IDC中的本地数据类型。所以不需要跟踪存储一个字符串所需空间。

IDC支持局部变量,使用任何变量前需要声明变量。

引入局部变量的关键字auto,声明时可以初始化。

全局变量的关键字extern,可以在函数内或外定义,但不能声明时带初始值,首次使用分配空间,生存周期和该会话生存周期一致。

Eg:auto addr, reg, val;

2。注释:C风格注释 /**/或//

3。使用“;”分号作为语句终止符和C一样

4。IDC不支持C风格数组(IDA5.6引入分片)、指针(IDA5.6开始支持)或结构体和联合体等复杂数据结构,IDA5.6使用的是类

5。IDC表达式

IDC支持几乎所有的C中的算术运算符,包括三元运算符,但不支持复合赋值运算符(eg:+= *= >>=等)。所有整数值的操作运作为有符号数处理,所以进行右移操作需要处理符号为(& 0x7FFFFFFF)

在IDC中不需要使用字符串来复制函数(C语言中strcpy,strdup),也不需要字符串拼接函数(C语言中strcat),使用分片指定与数组类似的变量子序列。

分片使用方法:[起始索引:结束索引]  至少需要一个索引,使用分片处理IDC字符串类似数组。

Eg: 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

6。IDC语句

所有IDC中所有简单语句均以“;”结束。switch是IDC唯一不支持的C风格复合语句。使用for循环时注意IDC不支持复合语句

Eg:auto i;

for(i = 0; i<10; i += 2){}        // 不合法

for(i = 0; i<10; i = i + 2){}     // 合法

IDC并不严格限制新引入的变量作用范围,所以可以在这些变量的{}外引用

Eg:

if(1){

auto x;

x = 10;

}else{

auto y;

y = 3;

}

Message(“x = %d\n”,x);

Message(“y = %d\n”,y);

结果是:x = 10, y =0;

所以在一个函数中,不能访问其他任何函数中的声明变量。

7。IDC函数

IDC仅仅在独立程序(.idc文件)中支持用户定义函数,IDC命令对话框不支持。

IDC中static关键字用于引入一个用户定义的函数,函数列表仅包含一个以“,”逗号分割的参数列表

函数的基本结构:

static my_fun(x,y,z){

auto a,b,c;

}

IDC函数两种传参方式:指传递,地址传递(使用&)

Eg:

auto q=0,r=1,s=2;

my_func(q, r, s);

my_func(q, &r, s);

函数声明不会明确是否返回值和返回值的类型,可以使用return返回值,任何隐式返回值都为0。可以将函数引用作为参数传递给另一个函数,并将函数引用作为函数结果返回。

Eg:

static getFunc(){

return Message;

}

static useFun(func,arg){

func(arg);

}

Static main(){

auto f = getFunc();

f(“hello world\n”);

usefun(f, “Print\n”);

}

8。IDC对象

IDC定义一个称为object的根类,所有类由它衍生,创建新类时支持单一继承,不使用访问说明符,所有类成员均为有效共类,类声明仅包含类成员函数声明。创建数据成员时,创建一个给数据成员赋值的赋值语句既可。

Eg:

Class ExampleClass{

ExapmleClass(x, y){

this.a = x;

this.b = y;

}

~ExampleClass(){}

foo(x){

this.a = this.a + x;

}

}

static main(){

ExampleClass ex;

auto ex = ExampleClass(1,2);

ex.foo(10);

ex.z = "string"

}

9。IDC程序

IDC程序文件基本结构:

#include <idc.idc>

static main(){

}

IDC认可以下C与处理指令

#include<文件>

#define<宏名称>[可选值]

#ifdef<名称>

#else

#endif

#undef<名称>

10。IDC错误处理

两类错误:

1。解析错误:仅报告IDC解析过程中的第一个错误。

2。运行错误:较少见,使用异常处理(try/catch)可以弥补IDC不能调试缺陷

11。IDC数据存储

IDC并不支持传统意义上的数组,IDC数组对象是稀疏数组(即不会预先分配数组空间而是按需分配)

12。关联IDC脚本热键

格式:

#include <idc.idc>

#include <my_amazing_script.idc>

static main(){

AddHotKey("z","MyAmazingFunc");

}

补充1:IDA的脚本IDC语言的更多相关文章

  1. IDA的脚本IDC的一个简单使用

    目的:主要是想学习一下IDA的IDC的脚本的使用.这里做了一个小的测试. 这里使用的是VS2015Community来生成文件的. 一.编写测试程序: 这里先生成我们的目标数据. 然后编写测试程序.得 ...

  2. NDK中, 如何提高脚本式语言的可读性

    原文来自安卓教程网android.662p.com,转载时请注明文章的来源:http://android.662p.com/thread-5245-1-1.html [概述]     NDK开发中, ...

  3. 基于lua的网页脚本开发语言cgilua(转)

    这里为大家介绍基于lua脚本实现的网页开发语言,cgilua 介绍 cgilua使用Lua是一个用于创建动态网页的服务器端脚本语言.纯LUA脚本和LUA页(LP)的支持,cgilua.Lua脚本是一个 ...

  4. shell脚本 gawk语言 综采话单 对账 字段核对

    今天被分配到对账组下的字段程序的了解和修改,在 SecureCRT 下的 run.sh 是字段对账的主程序,其中run.sh文件中含有gawk的代码. 程序的主要功能为 有两个文件夹 source存的 ...

  5. C语言基础:指针初级(补充) 分类: iOS学习 c语言基础 2015-06-10 21:54 19人阅读 评论(0) 收藏

    结构体指针:指向结构体指针的变量的指针. 结构体指针指向结构体第一个成员变量的首地址 ->:   指向操作符 定义的指针变量必须指向结构体的首地址,才可以使用  ->  访问结构体成员变量 ...

  6. 将PHP作为Shell脚本语言使用

    我们都知道.PHP是一种非常好的动态网页开发语言(速度飞快.开发周期短--).可是仅仅有非常少数的人意识到PHP也能够非常好的作为编写Shell脚本的语言,当PHP作为编写Shell脚本的语言时,他并 ...

  7. [转]如何将PHP作为Shell脚本语言使用

    From : http://www.linuxfly.org/post/559/ 我们都知道,PHP是一种非常好的动态网页开发语言(速度飞快,开发周期短……).但是只有很少数的人意识到PHP也可以很好 ...

  8. IDA IDC Tutorials: Additional Auto-Commenting

    https://www.hex-rays.com/products/ida/support/tutorials/idc/autocomment.shtml This program creates a ...

  9. IDA-IDC脚本编写语法

    1.IDA脚本编写基础 IDC是IDA内置的脚本语言,其语法与C非常相似,它是一种解释性语言. 执行方法 在IDA中按SHIFT+F2键会弹出一个对话框,把语句直接写在对话框中,点击run就可被运行. ...

随机推荐

  1. Scrapy笔记06- Item Pipeline

    Scrapy笔记06- Item Pipeline 当一个item被蜘蛛爬取到之后会被发送给Item Pipeline,然后多个组件按照顺序处理这个item. 每个Item Pipeline组件其实就 ...

  2. Utterance-level Aggregation for Speaker Recognition in The Wild

    文章[1]主要针对的是语句长度不定,含有不相关信号的说话人识别. 深度网络设计的关键在于主干(帧级)网络的类型[the type of trunk (frame level) network]和有时间 ...

  3. 网页网站基础入门篇: 使用Adobe Dreamweaver CS6 制作网页/网站

    咱开发网页或者网站呢,最好使用个软件,我使用的是Adobe Dreamweaver CS6 (自行下载安装) 打开软件 现在呢咱使用 html5 <!doctype html> <h ...

  4. ESA2GJK1DH1K基础篇: STM32+Wi-Fi(AT指令版)实现MQTT源码讲解

    前言 注: 本程序发送心跳包,发送温湿度,返回控制数据这三个发送是单独的,有可能凑到一起发. 由于本身程序就是复杂性的程序,所以这节程序没有使用中断发送,没有使用环形队列发送,为了避免多条消息可能凑到 ...

  5. ASP.NET Core 简介

    .NET Core 是 .NET Framework 的新一代版本,是微软开发的第一个具有跨平台 ( Windows.Mac OSX .Linux ) 能力的应用程序开发框 ASP.NET Core ...

  6. 洛谷p1747好奇怪的游戏题解

    题目 永远不要怀疑劳动人民的智慧! 把快读里最后的return直接返回零的 我已经不是第一次写错了! 我要是再写错我就****** 主要是逆向思维,把从两个点往(1, 1)走想成从(1, 1)点往这两 ...

  7. chentos7 编译安装keepalived 1.4.5

    准备工作: 下载源码包,官方网站 下载命令:wget https://www.keepalived.org/software/keepalived-1.4.5.tar.gz 解压tar包,命令: ta ...

  8. webpack的一些坑

    最近自己着手做一个小的Demo需要webpack,目前版本号是4.41.2,想使用的版本是3.6.0,因3x版本和4x版本很多地方不同,所以在安装过程中也是很多坎坷,下面是遇到的一些坑,和一些解决办法 ...

  9. 使用webpack.optimize.CommonsChunkPlugin提供公共代码

    在webpack4里使用webpack.optimize.CommonsChunkPlugin时,报错,webpack4删除了常用的 CommonsChunkPlugin ,提示我们用config.o ...

  10. Android studio中怎么导入android.support.v4包

    Android studio中怎么导入android.support.v4包 1.File点击选择projectStructure选择对应的APP然后点击Dependencies 2.点击+号,点击第 ...