<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 11.2 IDAPython 函數 IDAPython 能夠訪問所有的 IDC 函數,我們只介紹一些會馬上用到,為之后的 IDAPython 腳本編寫做基礎。IDC 總共有 100 多個函數,有興趣的可以研究研究。 ### 11.2.1 常用函數 以下的函數都是在編寫腳本的時候經常用到的。 `ScreenEA()` 獲取 IDA 調試窗口中,光標指向代碼的地址。通過這個函數,我們就能夠從一個已知 的點運行我們的腳本。 `GetInputFileMD5()` 返回 IDA 加載的二進制文件的 MD5 值,通過這個值能夠判斷一個文件的不同版本是否 有改變。 ### 11.2.2 段 在 IDA 中二進制文件被分成了不同的段,這些段根據功能分成了不同的類型( CODE, DATA, BSS, STACK, CONST,XTRN)。以下的函數用于分析獲得各種段信息。 `FirstSeg()` 訪問程序中的第一個段。 `NextSeg()` 訪問下一個段,如果沒有就返回 BADADDR。 `SegByName( string SegmentName )` 通過段名字返回段基址,舉個例子,如果調用.text 作為參數,就會返回程序中代碼段的開始 位置。 `SegEnd( long Address )` 通過段內的某個地址,獲得段尾的地址。 `SegStart( long Address )` 通過段內的某個地址,獲得段頭的地址。 `SegName( long Address )` 通過段內的某個地址,獲得段名。 `Segments()` 返回目標程序中的所有段的開始地址。 ### 11.2.3 函數 循環訪問程序中的所有函數,確定函數的范圍,是腳本編程中會經常碰到的問題。下面 的函數對于處理函數非常有用。 `Functions( long StartAddress, long EndAddress )` 返回一個列表,包含了從 StartAddress 到 EndAddress 之間的所有函數。 `Chunks( long FunctionAddress )` 返回一個列表,包含了函數片段。每個列表項都是一個元組(chunk start, chunk end) `LocByName( string FunctionName )` 通過函數名返回函數的地址。 `GetFuncOffset( long Address )` 通過任意一個地址,然后得到這個地址所屬的函數名,以及給定地址和函數的相對位移。 然后把這些信息組成字符串以"名字+位移"的形式返回。 `GetFunctionName( long Address )` 通過一個地址,返回這個地址所屬的函數。 ### 11.2.4 交叉引用 找出代碼和數據的交叉引用,在分析文件的執行流程時很重要,尤其是當我們分析感興趣的代碼塊的時候,盲目的查找無意義字符會讓你有一種想死的沖動,這也是為什么 IDA 依然會成為逆向工程的王者的原因。IDAPython 提供了一大堆函數用于各種交叉引用。最常 用的就是下面幾種。 `CodeRefsTo( long Address, bool Flow )` 返回一個列表,告訴我們 Address 處代碼被什么地方引用了,Flow 告訴 IDAPython 是否要 跟蹤這些代碼。 `CodeRefsFrom( long Address, bool Flow )` 返回一個列表,告訴我們 Address 地址上的代碼引用何處的代碼。 `DataRefsTo( long Address )` 返回一個列表,告訴我們 Address 處數據被什么地方引用了。常用于跟蹤全局變量。 `DataRefsFrom( long Address )` 返回一個列表,告訴我們 Address 地址上的代碼引用何處的數據。 ### 11.2.5 Debugger Hooks Debugger Hook 是 IDAPython 提供的另一個非常酷的功能,用于 Hook 住 IDA 內部的調 試器,同時處理各種調試事件。雖然 IDA 一般不用于調試任務,但是當需要動態調試的時 候,調用 IDA 內部調試器還是比外部的會方便很多。之后我們會用 debugger hooks 創建一 個代碼覆蓋率統計工具。使用 debugger hook 之前,先要睇你一個一個 hook 類然后在類里頭 定義各種不同的處理函數。 ``` class DbgHook(DBG_Hooks): # Event handler for when the process starts def dbg_process_start(self, pid, tid, ea, name, base, size) return # Event handler for process exit def dbg_process_exit(self, pid, tid, ea, code): return # Event handler for when a shared library gets loaded def dbg_library_load(self, pid, tid, ea, name, base, size): return # Breakpoint handler def dbg_bpt(self, tid, ea): return ``` 這個類包含了我們在創建調試腳本時,會經常用到的幾個調試事件處理函數。安裝 hook 的方式如下: ``` debugger = DbgHook() debugger.hook() ``` 現在運行調試器,hook 會捕捉所有的調試事件,這樣就能非常精確的控制 IDA 調試器。 下面的函數在調試的時候非常有用: `AddBpt( long Address )` 在指定的地點設置軟件斷點。 `GetBptQty()` 返回當前設置的斷點數量。 `GetRegValue( string Register )` 通過寄存器名獲得寄存器值。 `SetRegValue( long Value, string Register )` 設定寄存器的值。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看