From 61796a5623c00811b5ee2ab1d42c59786bf062ee Mon Sep 17 00:00:00 2001 From: "gergely.erdelyi" Date: Sat, 2 Aug 2008 19:44:42 +0000 Subject: [PATCH] idc.py: Implemented GetString() idc.py: Definition updated to match IDA 5.1 idc.idc --- python/idc.py | 74 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 66 insertions(+), 8 deletions(-) diff --git a/python/idc.py b/python/idc.py index 243c068..764cab3 100644 --- a/python/idc.py +++ b/python/idc.py @@ -201,6 +201,19 @@ FF_DOUBLE = idaapi.FF_DOUBLE # double FF_PACKREAL = idaapi.FF_PACKREAL # packed decimal real FF_ALIGN = idaapi.FF_ALIGN # alignment directive +def isByte(F): (isData(F) & (F & DT_TYPE) == FF_BYTE) +def isWord(F): (isData(F) & (F & DT_TYPE) == FF_WORD) +def isDwrd(F): (isData(F) & (F & DT_TYPE) == FF_DWRD) +def isQwrd(F): (isData(F) & (F & DT_TYPE) == FF_QWRD) +def isOwrd(F): (isData(F) & (F & DT_TYPE) == FF_OWRD) +def isTbyt(F): (isData(F) & (F & DT_TYPE) == FF_TBYT) +def isFloat(F): (isData(F) & (F & DT_TYPE) == FF_FLOAT) +def isDouble(F): (isData(F) & (F & DT_TYPE) == FF_DOUBLE) +def isPackReal(F): (isData(F) & (F & DT_TYPE) == FF_PACKREAL) +def isASCII(F): (isData(F) & (F & DT_TYPE) == FF_ASCI) +def isStruct(F): (isData(F) & (F & DT_TYPE) == FF_STRU) +def isAlign(F): (isData(F) & (F & DT_TYPE) == FF_ALIGN) + # # Bits for CODE bytes # @@ -318,6 +331,16 @@ def rotate_left(value, count, nbits, offset): return value +def rotate_dword(x, count): rotate_left(x, count, 32, 0) +def rotate_word(x, count): rotate_left(x, count, 16, 0) +def rotate_byte(x, count): rotate_left(x, count, 8, 0) + + +# AddHotkey return codes +IDCHK_OK = 0 # ok +IDCHK_ARG = -1 # bad argument(s) +IDCHK_KEY = -2 # bad hotkey name +IDCHK_MAX = -3 # too many IDC hotkeys def AddHotkey(hotkey, idcfunc): """ @@ -333,13 +356,6 @@ def AddHotkey(hotkey, idcfunc): return idaapi.add_idc_hotkey(hotkey, idcfunc) -# AddHotkey return codes -IDCHK_OK = 0 # ok -IDCHK_ARG = -1 # bad argument(s) -IDCHK_KEY = -2 # bad hotkey name -IDCHK_MAX = -3 # too many IDC hotkeys - - def DelHotkey(hotkey): """ Delete IDC function hotkey @@ -604,6 +620,20 @@ def MakeStr(ea, endea): return idaapi.make_ascii_string(ea, endea - ea, GetLongPrm(INF_STRTYPE)) +def MakeData(ea, flags, size, tid): + """ + Create a data item at the specified address + + @param ea: linear address + @param flags: FF_BYTE..FF_PACKREAL + @param size: size of item in bytes + @param tid: for FF_STRU the structure id + + @return: 1-ok, 0-failure + """ + raise NotImplementedError + + def MakeByte(ea): """ Convert the current item to a byte @@ -815,6 +845,10 @@ def MakeUnkn(ea, flags): return idaapi.do_unknown(ea, flags) +def MakeUnkn(ea, flags): + raise NotImplementedError + + def MakeUnknown(ea, size, flags): """ Convert the current item to an explored item @@ -2017,6 +2051,9 @@ def GetCommentEx(ea, repeatable): return idaapi.get_cmt(ea, repeatable) +def CommentEx(ea, repeatable): GetCommentEx(ea, repeatable) + + def AltOp(ea, n): """ Get manually entered operand string @@ -2031,6 +2068,23 @@ def AltOp(ea, n): return idaapi.get_forced_operand(ea, n) +def GetString(ea, len, type): + """ + Get string contents + @param ea: linear address + @param len: string length. -1 means to calculate the max string length + @param type: the string type (one of ASCSTR_... constants) + + return: string contents or empty string + """ + if len == -1: + strlen = idaapi.get_max_ascii_length(ea, type) + else: + strlen = len + + return idaapi.get_ascii_contents(ea, strlen, type) + + def GetStringType(ea): """ Get string type @@ -3329,6 +3383,8 @@ def LoadFile(filepath, pos, ea, size): else: return 0 +def loadfile(filepath, pos, ea, size): LoadFile(filepath, pos, ea, size) + def SaveFile(filepath, pos, ea, size): """ @@ -3350,6 +3406,8 @@ def SaveFile(filepath, pos, ea, size): else: return 0 +def savefile(filepath, pos, ea, size): SaveFile(filepath, pos, ea, size) + def fgetc(handle): raise DeprecatedIDCError, "fgetc() deprecated. Use Python file objects instead." @@ -5842,7 +5900,7 @@ def SetRegValue(value, name): return idaapi.set_reg_val(name, value) -def GetBptQty(): +def GetBptQty(): """ Get number of breakpoints.