当前位置: 首页 > news >正文

3.2 IDAPro脚本IDC常用函数

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常用函数

IDA Pro内置的IDC脚本语言是一种灵活的、C语言风格的脚本语言,旨在帮助逆向工程师更轻松地进行反汇编和静态分析。IDC脚本语言支持变量、表达式、循环、分支、函数等C语言中的常见语法结构,并且还提供了许多特定于反汇编和静态分析的函数和操作符。由于其…...

用python将csv表格数据做成热力图

python的开发者为处理表格和画图提供了库的支持,使用pandas库可以轻松完成对csv文件的读写操作,使用matplotlib库提供了画热力图的各种方法。实现这个功能首先需要读出csv数,然后设置自定义色条的各种属性如颜色,位置,…...

【程序基础】递归法

算法思想 递归法,其实可以说是一种编程技巧,通过调用自身,防止无限循环而给予递归出口。 思考使用场景 1.一个问题可以拆分成子问题,每个子问题相互独立。 2.数据满足递推关系,或者数据结构满足,例如图&…...

AI 绘画 | Stable Diffusion WebUI的基本设置和插件扩展

前言 Stable Diffusion WebUI是一个基于Gradio库的浏览器界面,用于配置和生成AI绘画作品,并且进行各种精细地配置。它支持目前主流的开源AI绘画模型,例如NovelAI/Stable Diffusion。 在基本设置方面,Stable Diffusion WebUI的默…...

如何用自然语言 5 分钟构建个人知识库应用?我的 GPTs builder 尝试

开发者的想象力闸门一旦打开,迎接我们的必然是目不暇接的 AI 应用浪潮冲击。 兴奋 早晨,我突然发现 ChatGPT 最新的 Create GPTs 功能可以用了。 这太让我意外了,没想到这么快。根据页面上的提示,我一直以为还得等上一周左右。于是…...

rabbitmq启动异常解决

如果 RabbitMQ 节点一直停在 "Stopping and halting node" 阶段,可能是由于一些原因导致节点无法正常停止。以下是一些建议的步骤,以尝试解决此问题: 手动强制终止节点: 尝试使用 rabbitmqctl 命令手动终止节点。在终端…...

OpenGL_Learn08(坐标系统与3D空间)

目录 1. 概述 2. 局部空间 3. 世界空间 4. 观察空间 5. 剪裁空间 6. 初入3D 7. 3D旋转 8. 多个正方体 9. 观察视角 1. 概述 OpenGL希望在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#x…...

github私有仓库开发,公开仓库发布版本

文章目录 github私有仓库开发,公开仓库发布版本需求背景实现思路GitHub Releases具体步骤广告 github私有仓库开发,公开仓库发布版本 需求背景 github私有仓库开发,公开仓库发布版本,既可以保护源代码,又可以发布版本给用户使用。许多知名软件项目都采用了这样的开…...

绿色低碳 数字未来-辽宁省建筑电气2023年学术年会-安科瑞 蒋静

2023年8月18日,辽宁省建筑电气2023年学术年会在辽宁友谊国宾馆成功召开。本届大会以“绿色低碳 数字未来”为主题,着眼为辽宁省建设提供智慧化电气设计及高质量产品服务。 安科瑞围绕“绿色低碳 数字未来”的主题,携充电桩及运营管理平台、工…...

day55

今日内容概要 路由层 无名分组 有名分组 反向解析 无名分组反向解析 有名分组反向解析 路由分发 伪静态的概念(了解) 名称空间(了解) 虚拟环境(了解) django1.x和django2.x的区别 路由层 url(r^test/$, views.test), url(rtestadd, views.testadd), ## 首页的地址 u…...

如何安装Node.js? 创建Vue脚手架

1.进入Node.js官网,点击LTS版本进行下载 Node.js (nodejs.org)https://nodejs.org/en 2.然后一直【Next】即可 3.打开【cmd】,输入【node -v】注意node和-v中间的空格 查看已安装的Node.js的版本号,如果可以看到版本号,则安装成功 创建Vue脚手…...

ASP.NETWeb开发(C#版)-day1-C#基础+实操

目录 .NET实操:创建项目执行 C#基础语法数据类型变量实操001_变量如何在一个解决方案 中创建另一个项目实操002结构实操003-if else实操004-多分支多行注释按钮实操:循环 面向对象基础如何在同一个项目下创建新的.cs文件实操-类的定义与访问实操-练习实操…...

LGSVL Python API 使用

1. References [1] LGSVL-python API使用方法 - 简书 [2] GitHub - lgsvl/PythonAPI: Python API for Simulator...

详解数据仓库之拉链表(原理、设计以及在Hive中的实现)

最近发现一本好书,读完感觉讲的非常好,首先安利给大家,国内第一本系统讲解数据血缘的书!点赞!近几天也会安排朋友圈点赞赠书活动(ง•̀_•́)ง 0x00 前言 本文将会谈一谈在数据仓库中拉链表相关的内容,包…...

使用Nodejs搭建简单的web网页并实现公网访问

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 使用Nodejs搭建简单的web网页并实现公网访问 前言 Node.js是建立在谷歌Chrome的JavaScript引擎…...

C++学习第三十七天----第十章--对象和类

10.2.2 C中的类 类是一种将抽象转换未用户定义类型的C工具,它将数据表示和操作数据的方法合成一个整洁的包。 接口:一个共享框架,供两个系统交互时使用。 1.访问控制 使用类对象的程序可以直接访问类的公有部分,但只能通过公有…...

TikTok影响力经济:解锁社交媒体的商业机遇

社交媒体平台的崛起改变了我们与世界互动的方式,而TikTok作为其中的一员,已经成为全球范围内的现象。这个短视频应用不仅让用户在几秒钟内分享创意和娱乐,还为企业和创作者提供了巨大的商业机会。本文将深入探讨TikTok的影响力经济&#xff0…...

燃气管网监测系统|全面保障燃气安全

根据新华日报的报道,2023年上半年,我国共发生了294起燃气事故,造成了57人死亡和190人受伤,燃气事故的发生原因有很多,其中涉及到燃气泄漏、设备故障等因素。因此,加强燃气安全管理,提高城市的安…...

第三章:人工智能深度学习教程-基础神经网络(第六节-ML深度学习层列表)

要指定所有层按顺序连接的神经网络的架构,请直接创建层数组。要指定层可以有多个输入或输出的网络架构,请使用 LayerGraph 对象。使用以下函数创建不同的图层类型。 输入层: 功能描述图像输入层 将图像输入网络应用数据标准化序列输入层 将…...

福建科立讯通信 指挥调度管理平台RCE漏洞复现

0x01 产品简介 福建科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。该产品旨在提供高效的指挥调度和管理解决方案,以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设…...

分切机程序开发:上下收放卷张力控制实现

分切机程序 ,上下收放卷张力控制,无电子凸轮功能。 触摸屏威纶通,PLC是三菱FX3U系列 在自动化生产领域,分切机的稳定运行至关重要,尤其是上下收放卷张力的精准控制。本文将探讨基于威纶通触摸屏和三菱FX3U系列PLC&…...

Zabbix监控Docker化部署避坑指南:从镜像版本选择到安全加固的完整配置

Zabbix监控Docker化部署避坑指南:从镜像版本选择到安全加固的完整配置 在容器化技术席卷运维领域的今天,将Zabbix监控系统部署在Docker环境中已成为主流选择。但看似简单的docker-compose up -d背后,隐藏着无数可能让运维工程师深夜加班的&qu…...

aliyun---MySql云数据库

在阿里云的云数据库(RDS MySQL)中,内网 IP 和 外网 IP 的区别主要体现在性能、安全性和通信链路上。你可以把 RDS 想象成写字楼里的“保险柜”,内网是“楼内通道”,外网是“临街大门”。 1. 核心对比 特性内网 IP (VP…...

Openclaw接入自动发文教程

本课概览 Microsoft Agent Framework (MAF) 提供了一套强大的 Workflow(工作流) 框架,用于编排和协调多个智能体(Agent)或处理组件的执行流程。 本课将以通俗易懂的方式,帮助你理解 MAF Workflow 的核心概念…...

Win11Debloat深度解析:让Windows重获新生的系统优化神器

Win11Debloat深度解析:让Windows重获新生的系统优化神器 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...

React Native Tab View终极指南:快速构建音乐播放器和聊天应用

React Native Tab View终极指南:快速构建音乐播放器和聊天应用 【免费下载链接】react-native-tab-view A cross-platform Tab View component for React Native 项目地址: https://gitcode.com/gh_mirrors/re/react-native-tab-view React Native Tab View是…...

2026行李箱推荐别乱买!唯尊、海澜之家、森马、外交官、珉璐保罗五款横评

对于技术从业者而言,行李箱不仅是装载衣物的容器,更是保护精密电子设备、应对高频差旅与跨城迁移的可靠装备。无论是前往异地调试系统、参加技术峰会,还是举家搬迁,一个设计合理、性能可靠的行李箱能显著提升出行效率与体验。本文…...

ESP32轻量级GraphQL客户端库设计与嵌入式实践

1. 项目概述esp32-graphql-client是一款专为 ESP32 平台设计的轻量级、高可靠性 GraphQL 客户端库,其设计哲学直接受益于 Apollo Client 的简洁性与表达力。该库并非简单封装 HTTP 请求,而是构建了一套面向嵌入式场景的完整数据交互抽象层:它…...

高效掌控Mem Reduct:智能多语言界面切换完全指南

高效掌控Mem Reduct:智能多语言界面切换完全指南 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 你是否曾…...

PADS Layout VX.1.2设计规则全解析:从安全间距到布线优化的实战技巧

PADS Layout VX.1.2设计规则全解析:从安全间距到布线优化的实战技巧 在高速PCB设计领域,规则约束如同交通信号灯般重要——它们决定了电流的"通行权"和"避让规则"。作为Mentor Graphics旗下的经典工具,PADS Layout VX.1…...