<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國際加速解決方案。 廣告
                [TOC] ## 概述 ## 寄存器尋址 ``` movl %eax, %edx # eax -> edx ``` ## 立即數尋址 ``` movl $0x123, %edx #數字->寄存器 ``` ## 直接尋址 ``` movl 0x123, %edx # 直接訪問內存地址數據,edx = *(int32_t *)0x123; ``` ## 間接尋址 ``` movl (%ebx), %edx # %ebx 是個內存地址,(%ebx)指的是該地址中的數據,edx = *(int32_t*)ebx; ``` ## 變址尋址 ``` movl 4(%ebx), %edx #edx = *(int32_t*)(ebx+4); ``` ## 分析匯編調用函數的過程 經常看到下面這兩句: ``` pushl %ebp movl %esp,%ebp ``` * esp是堆棧指針  * ebp是基址指針  那兩條指令的意思是:將棧頂`esp`指向`ebp`的地址  以下摘自網上一篇文章:  ``` push    ebp             ;ebp入棧  mov     ebp, esp        ;因為esp是堆棧指針,無法暫借使用,所以得用ebp來存取堆棧  sub     esp, 4*5        ;下面的wsprintf一共使用了5個參數,每個參數占用4個字節,所以要入棧4*5個字節  push    1111  push    2222  push    3333  push    offset szFormat  push    offset szOut  call    wsprintf        ;調用wsprintf  add     esp, 4*5        ;堆棧使用完畢,“還”回4*5個字節給系統  …  mov     esp, ebp        ;恢復esp的值  pop     ebp             ;ebp出棧  ret  ``` 主要是用來保存/恢復堆棧,以便傳遞參數給函數。在MASM里面,有一條更方便的語句,就是`invoke`,使用它后,你就不用自己做這些事情了。  —————————————————————  **esp始終指向棧頂,ebp是在堆棧中尋址用的** * 調用一個函數時,先將堆棧原先的基址(EBP)入棧,以保存之前任務的信息。 * 然后將棧頂指針的值賦給EBP,將之前的棧頂作為新的基址(棧底),然后再這個基址上開辟相應的空間用作被調用函數的堆棧。 * 函數返回后,從EBP中可取出之前的ESP值,使棧頂恢復函數調用前的位置;再從恢復后的棧頂可彈出之前的EBP值,因為這個值在函數調用前一步被壓入堆棧。 * 這樣,EBP和ESP就都恢復了調用前的位置,堆棧恢復函數調用前的狀態。 ps:https://blog.csdn.net/u013152417/article/details/44308289
                  <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>

                              哎呀哎呀视频在线观看