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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

IDC脚本介绍

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

IDC語言為IDA的一種腳本引擎,它之所以叫做IDC是因為它的語法與C語言很相似,這里我參考《IDA Pro權威指南》介紹一些IDC常用的基本語法。

1.IDC的變量沒有明確的類型,IDC關鍵字auto用于引入一個局部變量的聲明,用extern關鍵字引入全局變量的聲明,不能在聲明全局變量時為其提供初始值。

Example1:

auto addr, reg, val; //沒有初始化聲明的多個變量auto count = 0; //已聲明和初始化

Example2:

extern outsideGlobal;static main() {extern insideGlobal;outsideGlobal = “Global”;insideGlobal = 1; }

2.IDC幾乎支持C中的所有運算和邏輯操作符,所有整數操作數均作為有符號的值處理。這會影響到整數比較與右移位運算。如果需要進行邏輯右移位運算,你必須修改結果的最高位,自己移位,如下代碼:

Example3:

result = ( x >> 1 ) & 0x7fffffff; //將最大有效位設置為0

關于0x7fffffff :
每個十六進制數為4bit,因此8位16進制是4個字節,剛好是一個int整型,F的二進制碼為 1111,7的二進制碼為 0111。這樣一來,整個整數 0x7FFFFFFF 的二進制表示就是除了首位是 0,其余都是1。也就是說,這是最大的整型數 int(因為第一位是符號位,0 表示他是正數)。

3.雖然IDC沒有數組數據類型,但你可以使用分片運算符來處理IDC字符串,就好像他們是數組一樣,IDC分片的用法:

Example4:

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'

4.與C語言一樣,IDC所有簡單語句均以分號結束。Switch語句是IDC唯一不支持的C風格復合語句。在使用for語句時IDC不支持復合賦值運算符,如果你希望以除1以外的其他值為單位進行計數,就需要注意這一點,如下代碼:

Example5:

auto i; for (i = 0; i < 10; i += 2) {} //不合法,不支持 += for (i = 0; i < 10; i = i + 2) {} //合法

5.輸出語句(Message函數類似于C中的printf函數)

Example6:

auto i = 10; auto j = 20; Message(“i = %d\n”, i); Message(“j = %d\n”, j);

6.IDC文件僅僅在獨立程序(.idc文件)支持用戶自定義的函數,IDC命令對話框不支持。IDC程序文件的基本結構:

Example7:

#include<idc.idc> //頭文件 static main() {//do something fun here }

7.一些常用函數:

1)void PatchByte(long addr , long val) 設置虛擬地址addr處的一個字節值,PatchByte可更換為PatchWord,PatchDword設置虛擬地址addr處的2字節和4字節值。

2)long Byte(long addr) 從虛擬地址addr讀取一個字節值,Byte可更換為Word,Dword讀取2字節和4字節值。

3)void Message(string format , …),在輸出窗口打印一條格式化消息。

4)void print(…),在輸出窗口中打印每個參數的字符串表示形式。

5)long atol(string val),將10進制val轉化成對應整數值。

6)long xtol(string val),將16進制val轉化成對應整數值。

7)long ord(string ch),返回單字符字符串ch的ASCII值。

8)string Name(long addr),返回與給定地址有關的名稱,如果該位置沒有名稱,則返回空字符串。

總結

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

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