<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 2.2 棧 在開發調試器的時候,棧是一個非常重要的結構。棧存儲了與函數調用相關的各種信息, 包括函數的參數和函數執行完成后返回的方法。 ESP 負責跟蹤棧頂,EBP 負責跟蹤棧底。 棧從內存的高地址像低地址增長。讓我們用前面編寫的函數 my_sock()作為例子講解棧是如 何工作的。 Function Call in C ``` int my_socks(color_one, color_two, color_three); ``` Function Call in x86 Assembly ``` push color_three push color_two push color_one call my_socks ``` 棧框架的結構將如圖 2-1。 ![image](https://box.kancloud.cn/2016-03-11_56e23615c5e36.gif) 圖 2-1: my_socks() 函數調用的棧結構 如你所見,這是一個非常簡單的數據結構,同時也是所有程序中函數調用的基礎。當 my_sock()函數返回的時候,它會彈出棧里所有的參數(返回地址彈到 EIP),然后跳到返回 地址(Return address)指向的地方(父函數的代碼段)繼續執行。另一個需要考慮的概念就是 本地函數。把我們的 my_socks()函數擴展一點,讓我們假定函數被調用后做的第一件事就是 申請一個字符串數組,將參數 color_one 復制到數組里。代碼應該像這樣: ``` int my_socks(color_one, color_) { char stinky_sock_color_on[10]; ... } ``` 函數將在棧里申請 stinky_sock_color_on 變量的空間,以便在棧里調用(當然會隨著函 數的執行完畢而釋放,不過在函數內部訪問時,效率會高很多)。申請成功以后,堆棧的結 構將像圖 2-2 看到的這樣。 ![image](https://box.kancloud.cn/2016-03-11_56e236196420a.gif) Figure 2-2: 在 stinky_sock_color_one 申請后的棧框架 現在你到了本地函數是如何在棧里申請的以及棧指針是如何不斷的增長指向棧頂 的。調試器對堆棧結構的捕捉能力是相當有用的,特別是在我們捕捉程序崩潰,跟蹤調查基 于棧的緩沖區溢出的時候。
                  <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>

                              哎呀哎呀视频在线观看