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脚本编写语法的更多相关文章

  1. linux base脚本编写-自动领取微信红包

    bash脚本编写 语法 变量 定义: your_name = "ABC" 使用: echo $your_name 只读变量 a = "123" readonly ...

  2. 补充1:IDA的脚本IDC语言

    1.IDA脚本的打开与使用: IDA脚本两种语言:IDC(IDC,本地脚本语言)和Python 2.IDC语言介绍 1.IDC变量:IDC是一种松散的语言,没有明确的类型.使用3中数据类型,整数(ID ...

  3. shell(3):文本处理、基本语法和脚本编写

    一.awk.变量.运算符.if多分支 awk:shell编辑器的一种文本处理工具/命令,同grep.sed一样均可解释正则.具体运用下面awk文本处理有详细说明. 变量:分为系统变量和临时变量.变量一 ...

  4. LoadRunner脚本编写(转)

    性能测试工程师要懂代码么?答案是必须的.好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不多了.还有非计算机专业出身的测试员 ...

  5. shell脚本编写方法

    shell脚本编写就如同一门语言,涉及到运行环境.基本语法.变量定义.函数.参数(系统参数).条件判定.执行流程控制 等等问题. 本文就以下几个方面进行描述: 运行环境: shell  shebang ...

  6. 一个很不错的bash脚本编写教程

    转自 http://blog.chinaunix.net/uid-20328094-id-95121.html 一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂! 建立一个脚本 Lin ...

  7. shell脚本编写笔记

    包含转载内容,转载自http://wenku.baidu.com/link?url=jtCHxEYzgGve6P64U3JRQRgU6nhpGvqFLLpWu9I2Htq6hi9TGLudRFkk7r ...

  8. linux 脚本编写基础(一)

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在 ...

  9. 批处理bat脚本编写(附详细例子)

                                                        批处理bat脚本编写(附详细例子) 由于在项目开发的过程中经常需要编写bat脚本,而看大牛们编写 ...

随机推荐

  1. pycharm的使用小技巧111

    如果你想快速敲出if __name__ == '__main__':只需你敲个main 然后回车就ok了 import和from xx模块 import *的区别是前者使用时要加模块名加点,后者可以直 ...

  2. rsync常见错误

    rsync使用时的常见问题: 错误1: rsync: read error: Connection reset by peer (104) rsync error: error in rsync pr ...

  3. ASP.NET MVC+Bootstrap个人博客之文章打赏(六)

    看到新浪微博.百度百家等等平台上都带有文章“打赏”功能,觉得很新鲜,于是也想在自己的博客中加入“打赏”功能. 当然,加入打赏功能并非是真的想要让别人打赏.因为只有那些真正能引起共鸣,发人深思,让人受益 ...

  4. Hibernate配置(通过注解配置)

    本文主要讲通过注解配置来替换Hibernate的映射文件 1.多对一配置 package com.jazz7.entity; import java.util.Date; import javax.p ...

  5. 学习笔记 第十五章 JavaScript基础

    第15章   JavaScript基础 [学习重点] 了解JavaScript基础知识 熟悉常量和变量 能够使用表达式和运算符 正确使用语句 能够掌握数据类型和转换的基本方法 正确使用函数.对象.数组 ...

  6. LoadRunner脚本回放与设置

    一.runtime setting 1.迭代次数设置与迭代步长(循环间隔时间) 2.日志打印设置       二.实时观看回放 1.动态回放与静态回放(静态回放时,不会有逐行高亮显示:动态回放时高亮显 ...

  7. greenplum安装札记(待完善)

    1.安装配置 1.1硬件配置 硬件服务器用到某私有云中ip段为192.168.228.111-192.168.228.120的十台服务器,相关主要配置如下表: 类别 主机名 IP 内存 硬盘 主要目录 ...

  8. java格式化sql

    在日志分析中,经常会对记录的sql进行分析,所以将一整行sql格式化,进行多行缩就显得很有必要,许多数据库客户端都提供sql的格式化功能,但复杂的多层嵌套sql往往格式化的l还不够友好,所以就自己造了 ...

  9. C++ 继承/派生、访问属性、构造函数

    1.子类继承父类的继承方式:public,private,protected,不写则默认为private: 2.子类会继承父类的全部成员(除了构造函数.析构函数,虽然析构函数有virtual,但是不是 ...

  10. 如何优雅地从CSDN转载文章

    复制粘贴应该是最显而易见的方法,但是不仅会有丢失内容,而且格式也会丢失.要想达到更好的效果,可以从html源码入手. 1.在chrome浏览器中打开要转载的文章,右键选择检查 2.在chrome的右方 ...