[IDA]IDC脚本基础

IDC的变量 idc使用三种基本数据类型 整形,字符串,浮点值
idc使用auto关键字声明变量,使用extern关键字声
明全局变量
auto var = 1; //局部变量
extern var2 = 1; //全局变量
IDC的运算符 idc支持绝大部分c的运算符,但是不支持如+=的复合运算符,并且idc所有整数操作数
均作为有符号处理,移位运算符如>>总是进行算术移位,想要完成逻辑移位,必须手
动进行位运算。字符串是idc的基本类型,所以可以执行+号运算符拼接字符串。
IDC语句 idc不支持switch语句其他语句风格与c一致,以分号结束语句。
IDC函数 idc仅在idc的独立程序脚本中支持定义用户的函数。使用static关键字声明函数,可以使用return
返回一个值,return并非必须。参数为&a表示传引用
static func(a,b,c){
//函数体
}
IDC实用函数
idc同样为idapython提供了这些函数

返回值 函数名 参数
long Byte long addr 从虚拟地址addr处读取一个字节
long Word long addr 从虚拟地址addr处读取两个字节
long Dword long addr 从虚拟地址addr处读取四个字节
void PatchByte long addr, long val 设置虚拟地址addr处的一个字节值
void PatchWord long addr, long val 设置虚拟地址addr处的两个字节值
void PatchDword long addr, long val 设置虚拟地址addr处四个字节值
bool isLoaded long addr 如果addr包含有效数据,则返回1,否则0
如果提供一个无效的地址也会返回0xff,所以
isloaded可以判断是否有数据
void Message string format,.... 在输出窗口打印一条格式化字符串
void print .... 在输出窗口打印每个参数的字符串表示形式
void Warning string format,.... 在对话框中显示一条格式化消息
string AskStr string default, string prompt 显示一个输入框,要求用户输入一个字符串。如果操作成功
返回用户字符串,如果取消则返回0
string AskFile long doSave, string mask,
string prompt
显示一个文件选择对话框,以简化选择文件任务,如果操作成功,返回选择文件的名称,如果取消,返回0
long AskYN long default, string prompt 用一个答案为是或否提问,1为是,0为否,-1取消
long ScreenEA 返回当前光标所在位置的虚拟地址
bool Jump long addr 跳转到反汇编窗口指定地址
string form string format,.... 返回一个新字符串,由所提供的值格式化
string sprintf string format,.... 在ida5.6代替form
long atol string val 十进制转换为整数
long xtol string val 转换为16进制
string ltoa long val, long radix 以指定进制返回val
long ord string ch 返回单个字符串 ASCII
long strlen string str 返回字符串长度
long strstr string str, string substr 返回str中substr的索引
string substr string str, long start ,long end 返回start到end-1的字符串
long fopen string filename, string mode 返回文件句柄,和c语言一样
void fclose long handle 关闭文件
long filelength long handle 返回指定文件长度,如果错误-1
long fgetc long handle 从文件中读取一个字节
long fputc long val, long handle 写入一个字节,成功则0,失败-1
long fprintf long handle,string format, ... 一个格式化字符串写入给定文件
long writestr long handle, string str 指定字符串写入文件
string/long readstr long handle 从给定文件中读取一个字符串,读到一个换行符为止,包括换行符,末尾返回-1
long Dfirst long from 返回给定地址应用一个数据值的第一个位置。没有返回-1
long Dnext long from,long current 如果已经有一个位置,可以利用当前位置,搜索下一个位置。错误返回-1
long XrefType 返回最后一个交叉引用查询函数返回的类型
long DfirstB long to 返回给顶地址作为数据引用的第一个位置,不存在返回-1
long DnextB long to, long current 如果已经有一个位置,可以利用当前位置,搜索下一个位置。错误返回-1
long FindCode long addr, long flags flag指定查找行为,SEARCH_DOWN,扫描高位地址,SEARCH_NEXT跳过当前匹配,搜索下一个,SEARCH_CASE以区分大小写方式扫描二进制文本
从给定地址搜索一条指令
long FindeData long addr, long flags 从给定地址搜索一个数据项
long FindBinary long addr, long flags, string binary 从给定地址搜索一个字节序列
在独立的.idc脚本文件编写脚本时,需要按如下结构
#include
static main(){
//主函数
}
【[IDA]IDC脚本基础】保存为.idc文件后,打开ida在菜单中File>Script File可以执行idc脚本

    推荐阅读