IDA Pro内置的IDC脚本语言是一种灵活的、C语言风格的脚本语言,旨在帮助逆向工程师更轻松地进行反汇编和静态分析。IDC脚本语言支持变量、表达式、循环、分支、函数等C语言中的常见语法结构,并且还提供了许多特定于反汇编和静态分析的函数和操作符。由于其灵活性和可扩展性,许多逆向工程师都喜欢使用IDC脚本语言来自动化反汇编和静态分析过程,以提高效率和准确性。

经过上一节内容的学习相信读者已经找我了IDC脚本的基本编写技巧,根据IDAPro官方的资料可知,IDC脚本中封装了非常多有用的API接口,而要想更好的使用IDA实现自动化,这些结构的使用将变得非常重要,本节内容将总结整理IDA官方文档中的有用的API函数,来方便读者更好地运用。

(1)读取修改数据

函数 功能
long Byte(long addr) 读取1字节
long Word(long addr) 读取2字节
long Dword(long addr) 读取4字节
void PatchByte(long addr,long val) 设置虚拟地址处1个字节
void PatchWord(long addr,long val) 设置虚拟地址处1个字
void PatchDword(long addr,long val) 设置虚拟地址处4字节
void isLoaded(long addr) addr包含有效数据返回1,否则返回0

(2)用户交互函数

函数 功能
void Message(string format,...) 输出一条消息
void print(...) 打印每个参数的字符串表示形式
void Warning(string format....) 在对话框中显示一条格式化消息
string AskStr(string default,string prompt) 显示一个字符串输入框
string Askfile(long doSave,string mask,string prompt) 显示一个文件选择对话框,(doSave=1 0)mask(如.或*.idc)
long AskYN(long default,string prompt) 弹出是否选择对话框
long ScreenEA() 返回当前光标所在位置的虚拟地址
bool Jump(long addr) 跳转到反汇编窗口的指定地址

(3)字符串操作函数

函数 功能
string form(string format,....) 格式化并返回一个新字符串
string sprintf(string format....) 格式化并返回一个新字符串
long atol(string val) 将十进制值val转换成对应的整数值
long xtol(string val) 将十六进制值val(可选择以0x开头)转换成对应的整数值
string 1toa(long val.long radix) 以指定的radix(2、8、10或16)返回val字符串
long ord(string ch) 返回单字符字符串ch的ASCII值
long strlen(string str) 返回所提供字符串的长度
long strstr(string str.string substr) 返回str中substr的索引
string substr(string str. long start.long end) 返回包含str中由start到end-1位置的字符的子字符串

(4)文件输入输出函数

函数 功能
long fopen(string filename,string mode) 打开文件,模式(r表示读取,w表示写入)
void fclose(long handle) 关闭fopen中文件句柄指定的文件
long filelength(long handle) 返回指定文件的长度,如果发生错误,则返回-1。
long fgetc(long handle) 从给定文件中读取一个字节。如果发生错误,则返回-1。
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) 从给定文件中读取一个字符串。这个函数读取到下一个换行符为止的所有字符(包括非ASCII字符),包括换行符本身(ASCII 0xA)。如果操作成功,则返回字符串;如果读取到文件结尾,则返回-1。
long writelong(long handle, long val, long bigendian) 使用大端(bigendian=1)或小端(bigendian=0)字节顺序将一个4字节整数写入到给定文件中。
long readlong(long handle, long bigendian) 使用大端(bigendian=1)或小端(bigendian=0)字节顺序从给定的文件中读取一个4字节整数。
long writeshort(long handle, long val, long bigendian) 使用大端(bigendian=1)或小端(bigendian=0)字节顺序将一个2字节整数写入到给定的文件中。
long readshort(long handle, long bigendian) 使用大端(bigendian=1)或小端(bigendian=0)字节顺序从给定的文件中读取一个2字节整数。
bool loadfile(long handle, long pos, long addr, long length) 从给定文件的pos位置读取length数量的字节,并将这些字节写入以addr地址开头的数据库中。
bool savefile(long handle, long pos, long addr, long length) 将以addr数据库地址开头的length数量的字节写入给定文件的pos位置。

(5)操纵数据库名称

函数 功能
string Name(long addr) 返回与给定地址有关的名称,如果该位置没有名称,则返回空字符串。如果名称被标记为局部名称,这个函数并不返回用户定义的名称。
string NameEx(long from, long addr) 返回与addr有关的名称。如果该位置没有名称,则返回空字符串。如果from是一个同样包含addr的函数中的地址,则这个函数返回用户定义的局部名称。
bool MakeNameEx(long addr, string name, long flags) 将给定的名称分配给给定的地址。该名称使用flags位掩码中指定的属性创建而成。这些标志在帮助系统中的MakeNameEx文档中有记录描述,可用于指定各种属性,如名称是局部名称还是公共名称、名称是否应在名称窗口中列出。
long LocByName(string name) 返回一个位置(名称已给定)的地址。如果数据库中没有这个名称,则返回BADADDR(-1)。
long LocByNameEx(long funcaddr, string localname) 在包含funcaddr的函数中搜索给定的局部名称。如果给定的函数中没有这个名称,则返回BADADDR(-1)。

(6)处理函数的函数

函数 功能
long GetFunctionAttr(long addr,long attrib) 返回包含给定地址的函数的被请求的属性
string GetFunctionName(long addr) 返回包含给定地址的函数的名称
long NextFunction(long addr) 回给定地址后的下一个函数的起始地址
long PrevFunction(long addr) 返回给定地址之前距离最近的函数的起始地址

(7)代码交叉引用函数

函数 功能
long Rfirst(long from) 返回给定地址向其转交控制权的第一个位置
long Rnext(long from,long current) 如果current已经在前一次调用Rfirst或Rnext时返回,则返回给定地址(from)转交控制权的下一个位置。
long XrefType() 返回一个常量,说明某个交叉引用查询函数(如 Rfirst)返回的最后一个交叉引用的类型。
long RfirstB(long to) 返回转交控制权到给定地址的第一个位置。如果不存在对给定地址的交叉引用,则返回BADADDR(-1)。
long RnextB(long to.long current) 如果current 已经在前一次调用RfirstB或RnextB时返回,则返回下一个转交控制权到给定地址(to)的位置。如果不存在其他对给定位置的交叉引用,则返回BADADDR(-1)。

(8)数据交叉引用函数

函数 功能
string Name(long addr) 返回与给定地址有关的名称,如果该位置没有名称,则返回空字符串。如果名称被标记为局部名称,这个函数并不返回用户定义的名称。
string NameEx(long from, long addr) 返回与addr有关的名称。如果该位置没有名称,则返回空字符串。如果from是一个同样包含addr的函数中的地址,则这个函数返回用户定义的局部名称。
bool MakeNameEx(long addr, string name, long flags) 将给定的名称分配给给定的地址。该名称使用flags位掩码中指定的属性创建而成。这些标志在帮助系统中的MakeNameEx文档中有记录描述,可用于指定各种属性,如名称是局部名称还是公共名称、名称是否应在名称窗口中列出。
long LocByName(string name) 返回一个位置(名称已给定)的地址。如果数据库中没有这个名称,则返回BADADDR(-1)。
long LocByNameEx(long funcaddr, string localname) 在包含funcaddr的函数中搜索给定的局部名称。如果给定的函数中没有这个名称,则返回BADADDR(-1)。

(9)数据库操纵函数

函数 功能
void MakeUnkn(long addr, long flags) 取消位于指定地址的项的定义。这里的标志(参见IDCMakeUnkn文档)指出是否也取消随后的项的定义,以及是否删除任何与取消定义的项有关的名称。相关函数MakeUnknown允许你取消大块数据的定义。
long MakeCode(long addr) 将位于指定地址的字节转换成一条指令。如果操作成功,则返回指令的长度,否则返回0。
bool MakeByte(long addr) 将位于指定地址的项目转换成一个数据字节。类似的函数还包括MakeWordMakeDword
bool MakeComm(long addr, string corment) 在给定的地址处添加一条常规注释。
bool MakeFunction(long begin, long end) 将由beginend的指令转换成一个函数。如果end被指定为BADADDR(-1),IDA会尝试通过定位函数的返回指令,来自动确定该函数的结束地址。
bool MakeStr(long begin, long end) 创建一个当前字符串(由GetStringType返回)类型的字符串,涵盖由beginend-1之间的所有字节。如果end被指定为BADADDR,IDA会尝试自动确定字符串的结束位置。

(10)数据库搜索函数

函数 功能
long FindCode(long addr.long flags) 从给定的地址搜索一条指令
long FindBinary(long addr,long flags,string binary) 从给定的地址搜索一个字节序列
long FindData(long addr,long flags) 从给定的地址搜索一个数据项
long FindText(long addr. long flags. long row. long column, string text) 在给定的地址,从给定行(row)的给定列搜索字符串 text。

(11)反汇编系列函数

函数 功能
string GetDisasm(long addr) 返回给定地址的反汇编文本
string GetMnem(long addr) 返回位于给定地址的指令的助记符部分
string GetOpnd(long addr.long opnum) 返回指定地址的指定操作数的文本形式
long GetOpType(long addr,long opnum) 返回一个整数,指出给定地址的给定操作数的类型
long GetOperandValue(long addr.long oprum) 返回与给定地址的给定操作数有关的整数值
string CommentEx(long addr,long type) 返回给定地址处的注释文本

3.2 IDAPro脚本IDC常用函数的更多相关文章

  1. LR脚本中常用函数使用介绍

    1.变量和参数的设置 //将IP地址和端口放入到参数中lr_save_string("192.168.1.133:8081","ip"); //计算变量数组的元 ...

  2. python ftp操作脚本&常用函数

    需求:快速进行ftp上传 ,下载,查询文件 原来直接在shell下操作: 需要[连接,输用户名,输密码,单文件操作,存在超时限制] 太过于繁琐,容易操作失败 脚本改进: 一句命令,搞定多文件上传,下载 ...

  3. matlab进阶:常用功能的实现,常用函数的说明

    常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...

  4. LR常用函数以及调用自定义函数

    2.LR常用函数以及调用自定义函数 2.1.LR常用函数以及对信息的判断 2.1.1. LR内部自定义函数 在LR脚本中定义变量和编写自定义函数,需将变量的声明放在脚本其他内容的上方,否则会提示[il ...

  5. PHP常用函数备用

    刚学习php的时候,我也为记忆php函数苦恼不已.认为干嘛记忆这么枯燥无味的东西呢?用的时候查一下手册不就行了吗?但是当时因为身在辅导机构,还是记忆了一大堆自己并不感兴趣的函数. 由此就想起来,小的时 ...

  6. LoadRunner常用函数列表

    LoadRunner常用函数列表 Web相关函数 函 数 功  能  描  述 web_custom_request 用户可以通过该函数自行创建一个HTTP请求的函数 web_image 模拟用户单击 ...

  7. C#常用函数--通用篇

    C#常用函数→通用篇转载地址→http://www.cnblogs.com/superfang/archive/2008/07/02/1233706.html以前我都是"原文地址" ...

  8. PHP常用函数和常见疑难问题解答

    PHP常用库函数介绍 一.PHP字符串操作常用函数 1.确定字符串长度  int strlen(string str) 2.比较两个字符串 a. strcmp函数对两个字符串进行二进制安全的比较,并区 ...

  9. 最全的PHP常用函数大全

    PHP的一些常用函数 quotemeta() 函数在字符串中某些预定义的字符前添加反斜杠. quoted_printable_decode() 函数对经过 quoted-printable 编码后的字 ...

  10. PHP常用函数集合

    PHP常用函数总结 数学函数 1.abs(): 求绝对值 $abs = abs(-4.2); //4.2 数字绝对值数字 2.ceil(): 进一法取整 echo ceil(9.999); // 10 ...

随机推荐

  1. NOKOV度量光学动作捕捉系统工作流程

    如果你对影视.动画或者游戏有一定关注,相信你一定听说过"动作捕捉".事实上,无论是屏幕中的战场,还是真实的军事领域,从2K游戏中的虚拟球员,到医疗.康复.运动领域的专业研究:从机器 ...

  2. 【Docker】docker介绍 什么是虚拟化 容器与虚拟机比较 Docker 概念 docker安装

    目录 docker介绍 什么是虚拟化 docker是什么 容器与虚拟机比较 Docker 概念 docker安装 docker介绍 什么是虚拟化 在计算机中,虚拟化(英语:Virtualization ...

  3. 阿里云视频云「 vPaaS 」演绎了怎样的音视频应用开发「未来图景」?

    vPaaS是阿里云视频云最新推出的低代码音视频应用开发产品,其中,vPaaS低代码音视频工厂,彻底打破了音视频应用的繁冗技术开发壁垒:vPaaS视频原生应用开发平台,全新定义了音视频应用的开发方式. ...

  4. ASP.NET Web API Demo OwinSelfHost 自宿主 Swagger Swashbuckle 在线文档

    新建Web API工程 选Empty,勾选Web API,不要选择Web API,那样会把MVC勾上,这里不需要MVC Web API工程属性 XML文件用于生成在线文档 新建Windows服务作为W ...

  5. 汇编 | 数据段寄存器DS和[address]

    Description CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址,在8086PC中,内存地址由段地址和偏移地址组成.8086CPU中有一个DS寄存器,通常用来存放要访问 数据的段地 ...

  6. AtCoder Beginner Contest 172 (C题前缀和 + 二分,D题筛因子,E题容斥定理)

    AB水题, C - Tsundoku 题目描述 有两摞书,一摞有 $n$ 本,从上至下每本需阅读 $a_i$ 分钟,一摞有 $m$ 本,从上至下每本需阅读 $b_i$ 分钟,问最多能在 $k$ 分钟内 ...

  7. django的简单学习

    前言 以下项目实现基于一个投票系统 安装django 命令行安装 pip install django pycharm安装 pycharm的setting里找到这个,点击+号,搜索django 点击I ...

  8. 二、java发送https的各类请求

    导航 一.java发送http的各类请求 二.java发送https的各类请求 java开发中需要调用其他服务的对外提供的https请求,上一篇写的是调用http,处理方式不太一样,可以参考如下代码: ...

  9. vue-cli3.x中public和assets的区别

    今天开发了一个html5视频播放功能. vedio.mp4资源放在public文件夹下.那vue-cli3.x中public和assets的区别 vue-cli3.0有两个放置静态资源的目录分别是pu ...

  10. 2023全国大学生电子设计竞赛H题全解 [原创www.cnblogs.com/helesheng]

    2023年又是全国大学生电子设计竞赛年,一如既往的指导学生死磕H题.8月2日看到公布的赛题,我自己还沾沾自喜,觉得今年学生用嵌入式系统和数字信号处理知识就可以完成这题,赛前都辅导过,应该成绩不差.哪想 ...