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. python 内置命名空间、标准库、模块相关概念

    内置命名空间 python 解释器启动后就可以直接使用一些函数,常量,类型,异常等.保存这些数据的空间统称内置命名空间. 内置命名空间中包含的数据如下: 对于内置命名空间中最常用的就是内置函数. 内置 ...

  2. C++20 | std::span 陣列、容器的代理人

    在 C++ 裡頭有相當多「容器」.從原生的陣列,到標準庫 STL 的 vector, array, list, queue, map, set, -.有時候我們只是想以檢視的角度去看一個容器,或是其中 ...

  3. KMP 复习笔记

    KMP 学习(复习)笔记 KMP(Knuth-Morris-Pratt)是算法竞赛中常用的字符串匹配算法之一,它可以有效地利用失配信息来使得匹配全过程中不回溯,从而在线性时间内完成匹配. 本文已有前置 ...

  4. Vue tinymce富文本编辑器整合

    最近再弄一个后台管理系统,挑选了不少的编辑器,最终选择了tinymce,UI精美,功能模块多,可按需加载配置 vue cli 3 + tinymce5.0版本整合参考:https://liubing. ...

  5. 元素偏移量offset系列

    1.1 offset概述 offset翻译过来,就是偏移量,我们使用offset系列相关属性,可以动态的得到该元素的位置(偏移).大小等. 获取元素距离带有定位父元素的位置. 获得元素自身的大小(宽度 ...

  6. JavaWeb+JDBC+Servlet+SqlServer实现登录功能

    首先创建javaweb项目,可以参照以下: https://blog.csdn.net/u012532559/article/details/51013400 附上项目结构: 1.重写登录页面inde ...

  7. java基础-Junit 注解 枚举-day12

    目录 1. Junit 2. 注解 annotation 3. 枚举 1. Junit 白盒测试 黑盒测试 自行baidu了解 java单元测试 package com.msb01; import o ...

  8. C++编译器选择是否自动生成代码的背后逻辑

    C++编译器选择是否自动生成代码的背后逻辑 编译器会为class和struct(实际上两者在C++中是一回事)自动生成构造函数.赋值操作符函数和析构函数.如果不是这样,那么开发者就必须自己写一些枯燥冗 ...

  9. C++数据结构(树)

    树是一种递归定义的数据结构,如果树中节点的各子树从左到右是有次序的,不能互换,则称该树为有序树,否则叫无序树. 关于树的节点: 节点拥有的子树的个数叫做节点的度 如果度为0,那么该节点叫做叶节点或终端 ...

  10. Avalonia使用默认弹窗

    Avalonia使用默认弹窗 在Avalonia中使用官方默认弹窗WindowNotificationManager Views\MainWindow.axaml相关代码 <Window xml ...