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 | .... | 在输出窗口打印每个参数的字符串表示形式 | |
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 | 从给定地址搜索一个字节序列 |
#include
static main(){
//主函数
}
【[IDA]IDC脚本基础】保存为.idc文件后,打开ida在菜单中File>Script File可以执行idc脚本
推荐阅读
- CTF|BUUOJ [2019红帽杯]easyRE
- Reverse|Windows消息钩子[键盘监控]
- Pwn|[PWN]安恒杯2019.2 filesystem
- CTF之旅|2017全国大学生信息安全竞赛Reverse 填数游戏
- C|ret2dl_runtime_resolve实例分析