簡體   English   中英

匯編jmp偏移量是什么 <label+offset> 意思?

[英]What does assembly jmp offset <label+offset> mean?

我用了

objdump -M intel -d test

objdump -d test

用gcc 686-elf交叉編譯器反匯編一個非常簡單的for循環。 在這兩種情況下,我都會得到以下信息:

 d:   eb 11                   jmp    20 <loop+0x20>

完整轉儲(INTEL)為:

00000000 <loop>:
0:   55                      push   ebp
1:   89 e5                   mov    ebp,esp
3:   83 ec 10                sub    esp,0x10
6:   c7 45 fc 00 00 00 00    mov    DWORD PTR [ebp-0x4],0x0
d:   eb 11                   jmp    20 <loop+0x20>
f:   a1 00 00 00 00          mov    eax,ds:0x0
14:   83 c0 01                add    eax,0x1
17:   a3 00 00 00 00          mov    ds:0x0,eax
1c:   83 45 fc 01             add    DWORD PTR [ebp-0x4],0x1
20:   83 7d fc 09             cmp    DWORD PTR [ebp-0x4],0x9
24:   7e e9                   jle    f <loop+0xf>
26:   90                      nop
27:   c9                      leave  
28:   c3                      ret   

如果它正從標簽循環(從0開始)偏移到偏移量20,則這是有意義的。

使我感到困惑的是語法。 為什么我有兩個20's?

20 <loop+0x20>

十六進制20是跳轉目標地址。 loop+0x20本來是有幫助的,但是在這種情況下不是很有用。 反匯編程序發現符號地址最接近20 在這種情況下,它是loop 它重新計算20作為該標簽的偏移量。 由於標簽位於地址0 ,因此簡化為0+0x20 ,即20 ,它等於您期望的目標。

此表示在其他設置中更有用。 例如,如果標簽a代表int s數組的基數,則<a+0x20>將指定數組的第32個字節,即a[8]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM