long Byte(long addr)
从虚拟地址addr处读取一个字节值
long Word(long addr)
从虚拟地址addr处读取一个字(2字节)值
long Dword(long addr)
从虚拟地址addr处读取一个双字(4字节)值
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
void Message(string format,...)
在输出窗口打印一条格式化消息。这个函数类似于C语言的printf函数,并接受printf风格的格式化字符串
void print(...)
在输出窗口中打印每个参数的字符串表示形式
void Warning(string format,...)
在对话框中显示一条格式化消息
string AskFile(string default, string promat)
显示一个输入框,要求用户输入一个字符串值。如果操作成功,则返回用户的字符串;如果对话框被取消,则返回0
string AskFile(long doSave, string mask, string promat)
显示一个文件选择对话框,以简化选择文件的任务。你可以创建新文件保存数据(doSave=1),或选择现有的文件读取数据(doSave=0)。你可以根据mask(如*.*或*.idc)过滤显示的文件列表。如果操作成功,则返回选定文件的名称;如果对话框被取消,则返回0
long AskYN(long default, string prompt)
用一个答案为“是”或“否”的问题提示用户,突出一个默认的答案(1为是,0为否,-1为取消)。返回值是一个表示选定答案的整数
long ScreenEA()
返回当前光标所在位置的虚拟地址
bool Jump(long addr)
跳转到反汇编窗口的指定地址
string form(string format,...)
返回一个新字符串,该字符串根据所提供的格式化字符串和值进行格式化。这个函数基本上等同于C语言的sprintf函数
string sprintf()
在IDA5.6中,sprintf用于替代form
long atol(string val)
将十进制值val转换成对应的整数值
long xtol(string val)
将十六进制值val(可选择以0x开头)转换成对应的整数值
string IItoa(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的索引。如果没有发现子字符串,则返回-1
string substr(string str, long start, long end)
返回包含str中由start到end-1位置的字符的子字符串。如果使用分片,此函数等同于str[start:end]
long fopen(string filename, string mode)
返回一个整数文件句柄(如果发生错误,则返回0),供所有IDC文件输入/输出函数使用。mode参数与C语言的fopen函数使用的模式(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位置
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 LocByName(long funcaddr, string localname)
在包含funcaddr的函数中搜索给定的局部名称。如果给定的函数中没有这个名称,则返回BADADDR(-1)
long GetFunctionAttr(long addr, long attrib)
返回包含给定地址的函数的被请求的属性。请参考IDC帮助文档了解属性常量。例如,要查找一个函数的结束地址,可以使用GetFunctionAttr(addr, FUNCATTR_END)
string GetFunctionName(long addr)
返回包含给定地址的函数的名称。如果给定的地址并不属于一个函数,则返回一个空字符串
long NextFunction(long addr)
返回给定地址后的下一个函数的起始地址。如果数据库中给定地址后没有其他函数,则返回-1
long PrevFunction(long addr)
返回给定地址之前距离最近的函数起始地址。如果在给定地址之前没有函数,则返回-1
long LocBy(string Name)
根据函数的名称,返回该函数的起始地址
long Rfirst(long from)
返回给定地址向其转交控制权的第一个位置。如果给定的地址没有引用其他地址,则返回BADADDR(-1)
long Rnext(long from, long current)
如果current已经在前一次调用Rfirst或Rnext时返回,则返回给定地址(from)转交控制权的下一个位置。如果没有其他交叉引用存在,BADADDR(-1)
long XrefType()
返回一个常量,说明某个交叉引用查询函数(如Rfirst)返回的最后一个交叉引用的类型。对于代码交叉引用,这些常量包括fl_CN(近调用)、fl_CF(远调用)、fl_JN(近跳转)、fl_JF(远跳转)和fl_F(普通顺序流)
long RfirstB(long to)
返回转交控制权到给定地址的第一个位置。如果不存在对给定地址的交叉引用,则返回BADADDR(-1)
long RnextB(long to, long current)
如果current已经在前一次调用RfirstB或RnextB时返回,则返回下一个转交控制权到给定地址(to)的位置。如果不存在其他对给定位置的交叉引用,BADADDR(-1)
long Dfirst(long from)
返回给定地址引用一个数据值的第一个位置。如果给定的地址没有引用其他地址,则返回BADADDR(-1)
long Dnext(long from, long current)
如果current已经在前一次调用Dfirst或Dnext时返回,则返回给定地址(from)向其引用一个数据值的下一个位置。如果没有其他交叉引用存在,BADADDR(-1)
long XrefType()
返回一个常量,说明某个交叉引用查询函数(如Dfirst)返回的最后一个交叉引用的类型。对于数据交叉引用,这些常量包括dr_0(提供的偏移量)、dr_W(数据写入)和dr_R(数据读取)
long DfirstB(long to)
返回给定地址作为数据引用的第一个位置。如果不存在对给定地址的交叉引用,则返回BADADDR(-1)
long DnextB(long to, long current)
如果current已经在前一次调用DfirstB或DnextB时返回,则返回将给定地址(to)作为数据引用的下一次位置。如果没有其他交叉引用存在,BADADDR(-1)
void MakeUnkn(long addr, long flags)
取消位于指定地址的顶的定义。这里的表示(参见IDC的MakeUnkn文档)指出是否也取消随后的项的定义,以及是否删除任何与取消定义的项有关的名称。相关函数MakeUnknown允许你取消大块数据的定义
long MakeCode(long addr)
将位于指定地址的字节转换成一条指令。如果操作成功,则返回指令的长度,否则返回0
bool MakeByte(long addr)
将位于指定地址的项目转换成一个数据字节。类似的函数还包括MakeWord和MakeDword
bool MakeComm(long addr, string comment)
在给定的地址处添加一条常规注释
bool MakeFunction(long begin, long end)
将由begin到end的指令转换成一个函数。如果end被指定为BADADDR(-1),IDA会尝试通过定位函数的返回指令,来自动确定该函数的结束地址
bool MakeStr(long begin, long end)
创建一个当前字符串(有GetStringType返回)类型的字符串,涵盖由begin到end-1之间的所有字节。如果end被指定为BADADDR(-1),IDA会尝试自动确定字符串的结束位置
在IDA中Find系列函数中的flags参数是一个位掩码,可用于指定查找操作的行为。3个最为常用的标志分别为SEARCH_DOWN,它指示搜索操作扫描高位地址;SEARCH_NEXT,它略过当前匹配项,以搜索下一个匹配项;SEARCH_CASE,它以区分大小写的方式进行二进制和文本搜索
long FindCode(long addr, long flags)
从给定的地址搜索一条指令
long FindData(long addr, long flags)
从给定的地址搜索一个数据项
long FindBinary(long addr, long flags, string binary)
从给定的地址搜索一个字节序列。字符binary指定一个十六进制字节序列值。如果没有设置SEARCH_CASE,且一个字节值指定了一个大写或小写ASCII字母,则搜索仍然会匹配对应的互补值。例如,“41 42"将匹配"61 62"和"61 42”,除非你设置了SEARCH_CASE标志位
long FindText(long addr, long flags, long row, long column, string text)
在给定的地址,从给定行(row)的给定列搜索字符串text。注意,某个给定地址的反汇编文本可能会跨越几行,因此,你需要指定搜索应从哪一行开始
string GetDisasm(long addr)
返回给定地址的反汇编文本。反回的文本包括任何注释,但不包括地址信息
string GetMnem(long addr)
返回位于给定地址的指令的助记符部分
string GetOpnd(long addr, long opnm)
返回指定地址的指定操作数的文本形式。IDA以零为起始编号,从左向右对操作数编号
long GetOpType(long addr, long opnum)
返回一个整数,指出给定地址的给定操作数的类型。请参考IDC文档,了解操作数类型代码
long GetOperandValue(long addr, long opnum)
返回与给定地址的给定操作数有关的整数值。返回值的性质取决于GetOpType指定的给定操作数的类型
string CommentEx(long addr, long type)
返回给定地址处的注释文本。如果哦type为0,则返回常规注释的文本;如果type为1,则返回可重复注释的文本。如果给定地址处没有注释,则返回一个空字符串
实现的功能是导出一段内存的数据为数组形式
auto str_addr,end_addr,dat;
str_addr = 0x00413CD2;
end_addr = 0x00413D1C;
dat = end_addr - str_addr;
auto i = 0;
Message("[");
for(i=0;i<dat;i++){
if(i != dat-1)
{
Message("%d ,",Byte(str_addr+i));
}
else{
Message("%d",Byte(str_addr+i));
}
}
Message("]");
功能同上
from idaapi import *
data = []
model = "db"
str_addr = 0x00413CD2
end_addr = 0x00413D1C
dat = end_addr - str_addr
i = 0
for i in range(dat):
if model == "db":
data.append(Byte(str_addr + i))
if model == "dw":
data.append(Word(str_addr + i))
if model == "dd":
data.append(Dword(str_addr + i))
print data