补充1:IDA的脚本IDC语言
1。IDA脚本的打开与使用:

IDA脚本两种语言:IDC(IDC,本地脚本语言)和Python
2。IDC语言介绍
1。IDC变量:IDC是一种松散的语言,没有明确的类型。使用3中数据类型,整数(IDA文档使用类型名称long)、字符串、浮点值。绝大部分的操作是针对整数和字符串。
因为字符串被视为IDC中的本地数据类型。所以不需要跟踪存储一个字符串所需空间。
IDC支持局部变量,使用任何变量前需要声明变量。
引入局部变量的关键字auto,声明时可以初始化。
全局变量的关键字extern,可以在函数内或外定义,但不能声明时带初始值,首次使用分配空间,生存周期和该会话生存周期一致。
Eg:auto addr, reg, val;
2。注释:C风格注释 /**/或//
3。使用“;”分号作为语句终止符和C一样
4。IDC不支持C风格数组(IDA5.6引入分片)、指针(IDA5.6开始支持)或结构体和联合体等复杂数据结构,IDA5.6使用的是类
5。IDC表达式
IDC支持几乎所有的C中的算术运算符,包括三元运算符,但不支持复合赋值运算符(eg:+= *= >>=等)。所有整数值的操作运作为有符号数处理,所以进行右移操作需要处理符号为(& 0x7FFFFFFF)
在IDC中不需要使用字符串来复制函数(C语言中strcpy,strdup),也不需要字符串拼接函数(C语言中strcat),使用分片指定与数组类似的变量子序列。
分片使用方法:[起始索引:结束索引] 至少需要一个索引,使用分片处理IDC字符串类似数组。
Eg: auto str=”String to slice”;
auto s1,s2,s3,s4;
s1 = str[7:9] // to
s2 = str[:6] // String
s3 = str[10:] // slice
s4 = str[5] // g
6。IDC语句
所有IDC中所有简单语句均以“;”结束。switch是IDC唯一不支持的C风格复合语句。使用for循环时注意IDC不支持复合语句
Eg:auto i;
for(i = 0; i<10; i += 2){} // 不合法
for(i = 0; i<10; i = i + 2){} // 合法
IDC并不严格限制新引入的变量作用范围,所以可以在这些变量的{}外引用
Eg:
if(1){
auto x;
x = 10;
}else{
auto y;
y = 3;
}
Message(“x = %d\n”,x);
Message(“y = %d\n”,y);
结果是:x = 10, y =0;
所以在一个函数中,不能访问其他任何函数中的声明变量。
7。IDC函数
IDC仅仅在独立程序(.idc文件)中支持用户定义函数,IDC命令对话框不支持。
IDC中static关键字用于引入一个用户定义的函数,函数列表仅包含一个以“,”逗号分割的参数列表
函数的基本结构:
static my_fun(x,y,z){
auto a,b,c;
}
IDC函数两种传参方式:指传递,地址传递(使用&)
Eg:
auto q=0,r=1,s=2;
my_func(q, r, s);
my_func(q, &r, s);
函数声明不会明确是否返回值和返回值的类型,可以使用return返回值,任何隐式返回值都为0。可以将函数引用作为参数传递给另一个函数,并将函数引用作为函数结果返回。
Eg:
static getFunc(){
return Message;
}
static useFun(func,arg){
func(arg);
}
Static main(){
auto f = getFunc();
f(“hello world\n”);
usefun(f, “Print\n”);
}
8。IDC对象
IDC定义一个称为object的根类,所有类由它衍生,创建新类时支持单一继承,不使用访问说明符,所有类成员均为有效共类,类声明仅包含类成员函数声明。创建数据成员时,创建一个给数据成员赋值的赋值语句既可。
Eg:
Class ExampleClass{
ExapmleClass(x, y){
this.a = x;
this.b = y;
}
~ExampleClass(){}
foo(x){
this.a = this.a + x;
}
}
static main(){
ExampleClass ex;
auto ex = ExampleClass(1,2);
ex.foo(10);
ex.z = "string"
}
9。IDC程序
IDC程序文件基本结构:
#include <idc.idc>
static main(){
}
IDC认可以下C与处理指令
#include<文件>
#define<宏名称>[可选值]
#ifdef<名称>
#else
#endif
#undef<名称>
10。IDC错误处理
两类错误:
1。解析错误:仅报告IDC解析过程中的第一个错误。
2。运行错误:较少见,使用异常处理(try/catch)可以弥补IDC不能调试缺陷
11。IDC数据存储
IDC并不支持传统意义上的数组,IDC数组对象是稀疏数组(即不会预先分配数组空间而是按需分配)
12。关联IDC脚本热键
格式:
#include <idc.idc>
#include <my_amazing_script.idc>
static main(){
AddHotKey("z","MyAmazingFunc");
}
补充1:IDA的脚本IDC语言的更多相关文章
- IDA的脚本IDC的一个简单使用
目的:主要是想学习一下IDA的IDC的脚本的使用.这里做了一个小的测试. 这里使用的是VS2015Community来生成文件的. 一.编写测试程序: 这里先生成我们的目标数据. 然后编写测试程序.得 ...
- NDK中, 如何提高脚本式语言的可读性
原文来自安卓教程网android.662p.com,转载时请注明文章的来源:http://android.662p.com/thread-5245-1-1.html [概述] NDK开发中, ...
- 基于lua的网页脚本开发语言cgilua(转)
这里为大家介绍基于lua脚本实现的网页开发语言,cgilua 介绍 cgilua使用Lua是一个用于创建动态网页的服务器端脚本语言.纯LUA脚本和LUA页(LP)的支持,cgilua.Lua脚本是一个 ...
- shell脚本 gawk语言 综采话单 对账 字段核对
今天被分配到对账组下的字段程序的了解和修改,在 SecureCRT 下的 run.sh 是字段对账的主程序,其中run.sh文件中含有gawk的代码. 程序的主要功能为 有两个文件夹 source存的 ...
- C语言基础:指针初级(补充) 分类: iOS学习 c语言基础 2015-06-10 21:54 19人阅读 评论(0) 收藏
结构体指针:指向结构体指针的变量的指针. 结构体指针指向结构体第一个成员变量的首地址 ->: 指向操作符 定义的指针变量必须指向结构体的首地址,才可以使用 -> 访问结构体成员变量 ...
- 将PHP作为Shell脚本语言使用
我们都知道.PHP是一种非常好的动态网页开发语言(速度飞快.开发周期短--).可是仅仅有非常少数的人意识到PHP也能够非常好的作为编写Shell脚本的语言,当PHP作为编写Shell脚本的语言时,他并 ...
- [转]如何将PHP作为Shell脚本语言使用
From : http://www.linuxfly.org/post/559/ 我们都知道,PHP是一种非常好的动态网页开发语言(速度飞快,开发周期短……).但是只有很少数的人意识到PHP也可以很好 ...
- IDA IDC Tutorials: Additional Auto-Commenting
https://www.hex-rays.com/products/ida/support/tutorials/idc/autocomment.shtml This program creates a ...
- IDA-IDC脚本编写语法
1.IDA脚本编写基础 IDC是IDA内置的脚本语言,其语法与C非常相似,它是一种解释性语言. 执行方法 在IDA中按SHIFT+F2键会弹出一个对话框,把语句直接写在对话框中,点击run就可被运行. ...
随机推荐
- 研究下vc++的abort函数
最近在调试几个问题时,发现跟abort函数有关,以前只是简单使用,现在却发现不简单,就多留意了下. 简介 abort中止当前进程并返回错误代码.异常终止一个进程.中止当前进程,返回一个错误代码.错误代 ...
- CF852A Digits
CF852A Digits 隔壁yijian大佬写出了正解.那我就写一个随机化大法吧? 我们先考虑一种错误的贪心,每个数字分成一位,使其分割后数字和最小.虽然这样是错的,但是我们发现错误的概率很小,所 ...
- libevent笔记1:安装及DEMO
本篇简单记录了libevent的安装过程及基础的先进先出管道Demo,其中demo来自这篇博客,安装过程在这篇博客 实验环境 系统:Ubuntu 18.04.3 libevent版本:libevent ...
- flink安装启动(docker)
参考https://hub.docker.com/_/flink/ 相关端口The Web Client is on port 8081JobManager RPC port 6123TaskMana ...
- 1-5docker私有镜像仓库
1.简单操作 1.在 https://cloud.docker.com 免费注册一个 Docker 账号 2.登录 docker login #命令登录 Docker Hub. 3.注销 docker ...
- 使用MobaXterm配置ssh隧道(port forwarding)
背景描述:如图所示,本地与远程服务器之间存在防火墙,防火墙只允许SSH端口通过,为访问远程服务器,我们可以借助MobaXterm来与SSH服务器建立隧道,使得防火墙外的用户能够访问远程服务器 具体配置 ...
- gcc 在c代码中内嵌汇编调用c函数: 只是证明曾经我来过
我怕我不写下来,将来我都不记得我还在 c 中嵌套过汇编语言,用汇编代码调用一个c函数的过程. 折腾了一下午,在网上查看相关的资料,然后照葫芦画瓢地在c代码中嵌套汇编,希望解决我所遇到的问题,可最后发现 ...
- SpringMvc通过controller上传文件代码示例
上传文件这个功能用的比较多,不难,但是每次写都很别扭.记录在此,以备以后copy用. package com.**.**.**.web.api; import io.swagger.annotatio ...
- 【VS开发】vector features(num_images)析构报错
代码一气呵成,但运行的时候会出现_CrtIsValidHeapPointer的异常,跟进去调了一上午的Bug,终于搞定 跟踪定位到 _CrtIsValidHeapPointer ,注意到 g 8h&q ...
- Linux内核文档翻译——sysfs.txt
sysfs - _The_ filesystem for exporting kernel objects. sysfs – 用于导出内核对象(kobject)的文件系统 Patrick Mochel ...