日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

常用的IDC函数

發布時間:2025/3/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常用的IDC函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 讀取和修改數據的函數
    • 用戶交互函數
    • 字符串操縱函數
    • 文件輸入/輸出函數
    • 操縱數據庫名稱
    • 處理函數的函數
    • 代碼交叉引用函數
    • 數據交叉引用函數
    • 數據庫操縱函數
    • 數據庫搜索函數
    • 反匯編行組件

讀取和修改數據的函數

下面的函數可用于訪問數據庫中的各個字節,字和雙字

  • long Byte(long addr),從虛擬地址addr處讀取一個字節值
  • long Word(long addr),從虛擬地址addr處讀取一個字(2個字節)值
  • long Dword(long addr),從虛擬地址addr處讀取一個雙字(4個字節)值
  • long PatchByte(long addr,long val),設置虛擬地址addr處的一個字節值
  • long PatchWord(long addr,long val),設置虛擬地址addr處的一個字值
  • long PatchDword(long addr,long val),設置虛擬地址addr處讀取一個雙字值
  • void idLoaded(long addr),如果addr包含有效數據,則返回1,否則返回0
  • 在讀取和寫入數據庫時,這里的每一個函數都考慮到了當前處理器模塊的字節順序(小端或者大端)。例如,調用PatchByte(0x401010,0x1234)將使用字節值0x34(0x1234的低位字節)修改0x401010位置。如果在用Byte,Word和Dword讀取數據庫時提供了一個無效的地址,他們將分別返回值0xFF,0xFFFF和0xFFFFFFFF。因為你沒有辦法將這些錯誤值與存儲在數據庫中的合法值分開來,因此,在嘗試從數據庫中的某個地址讀取數據之前,可以調用isLoaded函數,

    用戶交互函數

  • void Message(string fromat,……),在輸出窗口打印一條格式化消息,這個函數類似于C語言的printf函數,并接受printf風格的格式化字符串
  • void printf(……),在輸出窗口中打印每個參數的字符串表示形式
  • void Warning(string fromat,……),在對話框中顯示一條格式化消息
  • string AskStr(string default,string prompt),顯示一個輸入框,要求用戶輸入一個字符串值。如果操作成功,則返回用戶的字符串;如果對話框被取消,則返回0
  • string AskFile(long doSave,string mask,String prompt),顯示一個文件選擇對話框,以簡化選擇文件的任務。你可以創建新文件保存數據(doSave=1),或選擇現有的文件讀取數據(doSave=0)。你可以根據mask(如*.*或*.idc)過濾顯示的文件列表。如果操作成功,則返回選定文件的名稱;如果對話框被取消,則返回0
  • long AskYN(long deafult,string prompt),用一個答案為“是”或“否”的問題提示用戶,如初一個默認的答案(1為是,0為否,-1為取消)。返回值是一個表示選定答案的整數。
  • long ScreenEA(),返回當前光標所在位置的虛擬地址
  • bool Jump(long addr),跳轉到反匯編窗口的指定地址
  • 因為idc沒有任何調試工具,可將Message作為主要調試工具,AskXXX函數用于處理更加專用的輸入,如整數輸入。如果希望創建一個根據光標位置調整其行為的腳本,這時,ScreenEA的函數就非常有用。如果腳本需要將用戶的注意力轉移到反匯編代碼的清單中的某個位置,也需要用到Jump函數

    字符串操縱函數

    簡單的字符串賦值和拼接操作可以直接通過idc 基本運算符實現,其它更加復雜操作需要用到以下函數:

  • string form(string format,…………)preIDA5.6,返回一個新字符串,該字符串根據所提供的格式化字符串和值進行格式化。這個函數基本等同于c中的sprintf函數
  • string sprintf(string format,……)IDA5.6+,在IDA5.6中,sprintf用于替代form
  • long atol(string val),將十進制val轉換成對應的整數值
  • long xtol(string val),將十六進制val(可選擇以0x開頭)轉換成對應的整數值
  • string Itoa(long val,long radix),以指定的radix(2,8,10或16)返回val的字符串值
  • long ord(string str),返回單字符字符串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位置的字符的子字符串,如果使用分片(IAD5.6以及更高的版本),此函數等同于str[start:end]
  • IDC沒有任何字符數據類型,它也不支持任何數組語法,如果想要遍歷字符串的每個字符,必須把字符串中的每個字符當成連續的單字符子字符串處理

    文件輸入/輸出函數

    已經討論了AskFile函數要求用戶輸入文件名,但是AskFile僅僅返回一個包含文件名的字符串值

  • 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 fromat,……)將一個格式化字符串寫入到給定文件中
  • 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位置
  • 操縱數據庫名稱

    下面的IDC函數用于處理IDA數據庫中已命名的位置:

  • 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)
  • 處理函數的函數

    許多腳本專用于分析數據庫中的函數。IDA為經過反匯編的函數分配大量屬性,如函數局部變量區域的大小,函數的參數在運行時棧上的大小。下面的IDC函數可用于訪問與數據庫中的函數有關信息

  • long GetFunctionAttr(long addr,long attrib),返回包含給定地址的函數的被請求的屬性。例如,要查找一個函數的結束地址,可以使用GetFunctionAttr( addr,FUNCATTR_END)
  • string GetFunctionName(long addr),返回包含給定地址的函數的名稱,如果給定的地址并不屬于一個函數,則返回一個空字符串
  • long NextFunction(long addr),返回給定地址后的下一個函數的起始地址,如果數據庫中給地地址后沒有其他函數,則返回-1
  • long PrevFunciton(long addr),返回給定地址之前距離最近的函數的起始地址,如果在給定函數之前沒有函數,則返回-1
  • 根據函數的名稱,使用LocByName 函數查找該函數的起始地址
  • 代碼交叉引用函數

  • long Rfirst(long from),返回給定地址向其轉交控制權的第一個位置。如果給定的地址沒有引用其他地址,則返回BADADDR(-1)
  • long Rnext(long from,long current),如果current已經在前一次調用Rfirst或Rnext時返回,則返回給定地址(from)轉交控制權的下一個位置,如果沒有其他交叉引用存在,則返回BADADDR
  • 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)
  • 每次調用一個交叉引用函數,IDA都會設置一個內部IDC狀態變量,指出返回的最后一個交叉引用的類型,如果需要知道你收到的交叉引用類型,那么在調用其他交叉引用查詢函數之前,必須調用XrefType函數

    數據交叉引用函數

    訪問數據交叉引用信息的函數與訪問代碼交叉引用信息的函數非常相似:

  • long Dfirst(long from),返回給定地址引用一個數據值的第一個位置,如果給定地址沒有引用其他地址,則返回BADADDR(-1)
  • long Dnext(long from,long current),如果current已經在前一次調用Dfirst或Dnext時返回,則返回給定地址(from)向其引用一個數據值的下一個位置。如果沒有其他交叉引用存在,則返回BADADDR
  • long XrefType(),返回一個 常量,說明某個交叉引用查詢函數(如Dfirst)返回的最后一個交叉引用的類型,對于數據交叉引用,這些常量包括dr_0(提供的偏移量),dr_w(數據寫入)和dr_R(數據讀取)
  • long DnextB(long to,long current),如果current已經在前一次調用DfirstB或DnextB時返回,則返回將給定地址(to)作為數據引用的下一次位置。如果沒有其他對給定地址的交叉引用存在,則返回BADADDR
  • 和代碼交叉引用一樣,如果需要知道你收到的交叉引用的類型,那么在調用另一個交叉引用查詢函數之前,必須調用XrefType函數

    數據庫操縱函數

    大量函數用于對數據庫的內容進行格式化:

  • void MakeUnkn(long addr,long flags),取消位于指定位置的項的定義。這里的標志指出是否也取消隨后的項的定義,以及是否刪除任何與取消定義的項有關的名稱,相關函數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,IDA會嘗試自動確定字符串的結束位置
  • 還有許多MakeXXX函數可提供上述函數操作

    數據庫搜索函數

  • 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,注意,某個給定地址的反匯編文本可能會跨越幾行,因此,你需要指定搜索從哪一行開始的
  • 注意:SEARCH_CASE并未定義搜索的方向,根據SEACH_DOWN標志,其方向可能向上也可能向下,此外,如果沒有設置SEACH_NEXT,且addr位置的項與搜索條件匹配,則FindXXX函數很可能會返回addr參數傳遞給該函數的地址

    反匯編行組件

  • string GetDisasm(long addr),返回給定地址的反匯編文本,返回的文本包括任何注釋,但不包括地址信息
  • string GetMnem(long addr),返回位于地址的指令助記符部分
  • string GetOpnd(long addr,long opnum),返回指定地址的指定操作數的文本形式。IDA以零為起始編號,從左向右對操作數進行編號
  • long GetOpType(long addr,long opnum),返回一個證書,指出給定地址的給定操作數的類型
  • long GetOperandValue(long addr,long opnum),返回與給定地址的給定操作數有關的整數值,返回值的性質取決于GetOpType指定的給定操作數的類型
  • string CommentEx(long addr,long type),返回給定地址處的注釋文本。如果type為0,則返回常規注釋文本;如果type為1,則返回可重復注釋的文本。如果給定地址處沒有注釋,則返回一個空字符串。
  • 總結

    以上是生活随笔為你收集整理的常用的IDC函数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 大学生一级片 | 免费在线观看成年人视频 | 中国精品视频 | 善良的女邻居在线观看 | av在线免费播放网站 | 天堂在线视频网站 | 九九热国产在线 | 牛牛av| 欧美男人的天堂 | 亚洲熟妇中文字幕五十中出 | 日韩av大片 | 午夜影院久久 | 欧美韩日国产 | аⅴ资源新版在线天堂 | 亚洲精品视频在线观看免费 | 妖精视频在线观看免费 | 国产精九九网站漫画 | 天天综合天天做天天综合 | 欧美日本综合 | 亚洲精品视 | 91综合国产| 在线观看日韩av电影 | 国产精品久久久久久久久毛片 | 精品资源在线 | 三级免费观看 | 99久久人妻无码精品系列 | 亚洲经典一区二区 | 国内自拍网站 | 成人区人妻精品一区二区不卡视频 | 老王66福利网 | 国产乱国产乱300精品 | av卡一卡二 | 免费成人深夜夜视频 | 最新中文字幕免费视频 | 欧美精品 在线观看 | 日韩精品中文在线 | 欧洲精品无码一区二区 | 男人插入女人下面的视频 | 国产三级在线免费 | 亚洲天堂资源 | 久久黄色网 | 日本一区二区三区欧美 | 粗大的内捧猛烈进出 | 精品国产乱码一区二区 | 加勒比伊人 | 男人的天堂视频 | 日韩中文字幕一区二区三区四区 | 国产日韩在线观看一区 | 羞羞漫画在线 | 91精品免费在线观看 | 自由 日本语 热 亚洲人 | 91草草草| 日韩在线不卡 | 亚洲人成人无码网www国产 | 国产精品zjzjzj在线观看 | 很黄很色的视频 | 欧美成人福利视频 | avtt2015| 精品久久999 | 日本一级大片 | 亚洲成人网在线播放 | 日韩少妇一区二区 | 欧美人妻精品一区二区免费看 | av无码精品一区二区三区 | а√天堂中文在线资源8 | 精品白浆| 久久国产人妻一区二区免色戒电影 | 国产视频一区二区三 | 山村淫强伦寡妇 | 国产精品一区二区自拍 | 国产乱色 | 少妇高潮久久久久久潘金莲 | 污的视频在线观看 | 欧美日日骚 | 国产精品一区二区三区四 | 中文字幕一区二区三区人妻在线视频 | 午夜精品在线观看 | 日韩欧美三级在线 | 1024金沙人妻一区二区三区 | 假日游船 | 久久久www成人免费精品 | 宅男噜噜噜66一区二区 | 欧美射图| 2020国产精品 | 国产乱码一区二区 | 久久久国产亚洲 | 日韩一二三四区 | 久久成人福利视频 | 尹人在线视频 | 天天躁夜夜躁av天天爽 | 久久97精品久久久久久久不卡 | 91在线公开视频 | 99在线观看免费 | 欧美日韩高清在线 | 91av麻豆| 欧美 日韩 综合 | 日日夜夜狠狠爱 | 亚洲 欧美 国产 另类 | 久久五月天综合 |