令人迷惑的AT&T的jmp:直接跳轉和間接跳轉

來源:互聯網
上載者:User
最近看連結器源碼中,對位置無關代碼PIC(共用庫)的連結問題,發現對call和jmp很多不常用的用法,這裡實驗並總結了一下各種用法。

我們最常用的jmp形式,就是 jmp後面跟個標籤!這個沒什麼可說的!

假如標籤叫做mylabel,它的地址是0x8048377,而且有個全域變數b,b儲存的內容就是mylabel的地址,而b的地址是0x80494A8。即有這樣的賦值(載入)語句:movl$mylabel,%eax//把mylabel的地址載入到eax寄存器中movl%eax,b//把mylabel的地址載入到b中movl$b,%ebx//把b的地址載入到ebx寄存器中 我們考慮下面的語句:1.jmpmylable2.jmp0x80483773.jmp%eax4.jmp*%eax5.jmp*(%ebx)6.jmp*0x80494A87.jmp*b8.jmp$0x5 這7句jmp語句!分別都做了什嗎? 1.不用說,跳轉到mylabel標籤處繼續執行代碼,但是,是如何跳轉的呢?就是PC加上了mylabel標籤處對於jmp處的一個位移地址!可執行檔二進位代碼是這樣表示的:eb 03,就是說,pc+0x03就可以了。 2.這裡,0x8048377是mylabel的地址,我以前研究過,標籤的作用,更他的地址的作用是等效的。所以,這裡的執行效果跟1中的相同。但是,還有些不一樣!這裡的二進位代碼成了:e9 03 00 00 00 這裡用了32位表示了這個位移,而在1中,只用了8位! 3.在編譯連結的時候,這句代碼會有警告:warning:indirect jmp without '*'。間接跳轉沒有‘*’符號,但是,執行起來,還是沒有錯。看一下二進位的可執行檔的代碼,發現,給補上了個‘*’號!而且二進位是:ff e0. 4.其實,4是3的補充版,正常的形式就是4,而三是有警告的被補充的版本。 5.%ebx是b的地址,那麼(%ebx)表示ebx的值為地址,指向的地方。這裡指向了b的內容,也就是mylabel的地址!於是,化簡後,5也就等效與2,但是,二進位表示是:ff 23。 6.0x80494A8是b的地址,這裡看做記憶體數,那麼實質上,b指向的值是mylabel的地址,於是,化簡後同2,二進位代碼是:ff 25 a8 94 04 08。 7.b是標籤,代表一個地址,所以,這裡同6,二進位代碼也同6 8.這句話是錯誤的,jmp不支援立即數! 所以說,正確的寫法有: 1.jmpmylable//eb 032.jmp0x8048377//e9 03 00 00 00 3.jmp*%eax//ff e04.jmp*(%ebx)//ff 235.jmp*0x80494A8//ff 25 a8 94 04 086.jmp*b//ff 25 a8 94 04 08 1和2叫做間接定址,就是算位移量的。後面沒有‘*’號,而是直接一個標籤或者地址(標籤就可以看做是地址),所以說,就是一個直接的地址的值。間接跳轉的二進位代碼是eb或者e9,是e開頭的。3,4,5,6叫做直接定址,直接定址的標識就是這個‘*’號!直接定址,就是PC直接賦值某個地址,而不是加位移量。所以,‘*’號後面的部分,其實是一個要付給PC的值,那麼,取值的方式就好想象了!直接跳轉的二進位代碼是ff開頭的。 3是寄存器直接取值;4是寄存器間接取值;5是記憶體數取值;6是標籤取值(實質上同5)。 確實,有點意思~call同jmp指令! [轉] http://gtkchen.blog.sohu.com/105685961.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.