IDA-IDC脚本编写语法
1、IDA脚本编写基础
IDC是IDA内置的脚本语言,其语法与C非常相似,它是一种解释性语言。
- 执行方法
- 在IDA中按SHIFT+F2键会弹出一个对话框,把语句直接写在对话框中,点击run就可被运行。
- 在菜单栏中File | Script file载入idc文件。
2、IDC语法
IDC语言可参考C语言,语句以分号结束,注释为//或/**/,但也有很多不同。
- 2.1 输出(类似C语言中的printf函数)
- void Message(string format, …);
- Message(“Hello world!”);
- Message(“%s\n”, “Hello world!”);
2.2 变量
IDC中所有变量都被定义成auto类型,会自动进行类型转换,一般类型有整数型、字符串类型、浮点型。
- 局部变量:auto counter;
- extern 引入全局变量的声明,extern outsideGlobal;
- 字符串支持加好连接:auto str = "hello" + "world";
- 字符串支持分片操作:str1 = str[7:9];
2.3 操作符
- 许多标准的C语言操作符(+、-、*、/、%、<<、>>、++、--)在IDC同样适用,但复合赋值运算符+=不支持、逗号操作符也不被支持。
2.4 条件
- if、if else及三目运算符“?:”是支持的,但是switch语句是不支持的。
auto currAddr;
currAddr = ScreenEA();
if (currAddr % )
Message(“%x is odd\n”, currAddr);
else
Message(“%x is even\n”, currAddr);
2.5 循环
- 循环可以用for、while、do while实现。
auto origEA, currEA, funStart, funEnd;
origEA = ScreenEA();
funStart = GetFunctionAttr(origEA, FUNCATTR_START);
funEnd = GetFunctionAttr(origEA, FUNCATTR_END);
if(funStart == -)
Message(“%x is not part of a functuion\n”), origEA);
for(currEA=funStart; currEA != BADADDR; currEA=NextHead(currEA, funEnd)){
Message(“%8x\n”, currEA);
}
2.6 函数
- IDC所有函数必须被定义为静态。
- 函数的声明与C语言不同,不需要指定类型。
- 函数参数传递中,加上&表示传地址,不加表示传值。
- return 返回函数输出。
- 把自己的IDC函数库加入到ida.idc文件中,我们就可以全局使用自己的IDC函数了。
// 例1:
static outputCurrentAddress(){
auto currAddress;
currAddress = ScreeenEA();
Message(“%x\n”, currAddress);
return currAddress;
}
// 例2:
my_func(q, r, s)
2.7 IDC对象
class ExampleClass{
ExampleClass(x, y){
this.x = x;
this.y = y;
}
~ExampleClass(){
}
foo(x){
this.a = this.a + x;
}
} static main(){
ExampleClass ex;
auto ex = ExampleClass(, );
ex.foo();
ex.z = "string" //特点,可随时给对象添加成员
}
2.8 IDC程序
- 将IDC脚本代码放到一个文件中可永久性保存。
- #include <文件> 将指定文件包含在当前文件中
- #define <宏名称> [可选值]
- #ifdef <名称> 测试宏是否存在
- #else 与#ifelse共同使用
- #endif #ifdef的终止符
- #undef <名称>删除宏定义
#include <idc.idc>
static main(){
// 代码体
}
2.9 IDC错误处理
- try/catch
2.10 数组
3、有用的IDC函数
IDA-IDC脚本编写语法的更多相关文章
- linux base脚本编写-自动领取微信红包
bash脚本编写 语法 变量 定义: your_name = "ABC" 使用: echo $your_name 只读变量 a = "123" readonly ...
- 补充1:IDA的脚本IDC语言
1.IDA脚本的打开与使用: IDA脚本两种语言:IDC(IDC,本地脚本语言)和Python 2.IDC语言介绍 1.IDC变量:IDC是一种松散的语言,没有明确的类型.使用3中数据类型,整数(ID ...
- shell(3):文本处理、基本语法和脚本编写
一.awk.变量.运算符.if多分支 awk:shell编辑器的一种文本处理工具/命令,同grep.sed一样均可解释正则.具体运用下面awk文本处理有详细说明. 变量:分为系统变量和临时变量.变量一 ...
- LoadRunner脚本编写(转)
性能测试工程师要懂代码么?答案是必须的.好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不多了.还有非计算机专业出身的测试员 ...
- shell脚本编写方法
shell脚本编写就如同一门语言,涉及到运行环境.基本语法.变量定义.函数.参数(系统参数).条件判定.执行流程控制 等等问题. 本文就以下几个方面进行描述: 运行环境: shell shebang ...
- 一个很不错的bash脚本编写教程
转自 http://blog.chinaunix.net/uid-20328094-id-95121.html 一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂! 建立一个脚本 Lin ...
- shell脚本编写笔记
包含转载内容,转载自http://wenku.baidu.com/link?url=jtCHxEYzgGve6P64U3JRQRgU6nhpGvqFLLpWu9I2Htq6hi9TGLudRFkk7r ...
- linux 脚本编写基础(一)
1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在 ...
- 批处理bat脚本编写(附详细例子)
批处理bat脚本编写(附详细例子) 由于在项目开发的过程中经常需要编写bat脚本,而看大牛们编写 ...
随机推荐
- QQ文件没有读取权限,60017导致QQ无法登陆的终极解决办法
每隔一段时间,我的QQ就无法登陆,提示:QQ文件没有读取权限,60017导致QQ无法登陆的终极解决办法 点击了解详情发现里面的解决办法根本不起作用,网上 说的各种解决办法都不起作用,解决办法如下 1. ...
- [转]Entity Framework and SQL Azure
本文转自:https://msdn.microsoft.com/zh-cn/library/gg190738 Julie Lerman http://thedatafarm.com April 201 ...
- 自定义button上传按钮
<div class="upload_files"> <input type="file" class="upload_icon&q ...
- 桥接模式和php实现
桥接模式(Bridge Pattern): 将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模 ...
- iOS Programming Controlling Animations 动画
iOS Programming Controlling Animations 动画 The word "animation" is derived from a Latin wor ...
- VB6程序中NULL注意事项
VB6中从数据库中取出栏位值进行操作,若栏位值为Null,则必须小心处理,否则极易导致程序出错退出. 通常我们从recordset中取出栏位值采用Fields方法,加上栏位名称,如 rsMoney.F ...
- Android(java)学习笔记202:JNI之hello.c(c代码功能实现)指针语法解析
1. 接下来我们细讲分析一下前面一讲中,c功能实现的代码: (1)hello.c : #include <jni.h> char* getHello() { //////// return ...
- Spring Boot(15)——自动配置Validation
自动配置Validation当应用中的Classpath下存在javax.validation的实现时,Spring Boot的org.springframework.boot.autoconfigu ...
- CREATE RULE - 定义一个新的重写规则
SYNOPSIS CREATE [ OR REPLACE ] RULE name AS ON event TO table [ WHERE condition ] DO [ INSTEAD ] { N ...
- HTTP请求报文与响应报文格式
请求报文包含三部分: a.请求行:包含请求方法.URI.HTTP版本信息 b.请求首部字段 c.请求内容实体 响应报文包含三部分: a.状态行:包含HTTP版本.状态码.状态码的原因短语 b.响应首部 ...