gpt4 book ai didi

assembly - assembly jmp offset 是什么意思?

转载 作者:行者123 更新时间:2023-12-05 03:10:56 27 4
gpt4 key购买 nike

我用过

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

20 <loop+0x20>

最佳答案

十六进制 20是跳转目标地址。 loop+0x20本来是有帮助的,但在这种情况下并不是很有帮助。反汇编器找到了最接近 20 的符号地址.在本例中为 loop .它重新计算了20作为该标签的偏移量。由于标签位于地址 0 , 这简化为 0+0x20 ,即 20 ,它等于您预期的目标。

这种表示在其他设置中更有帮助。例如,如果标签 aint 数组的基础s,然后 <a+0x20>将指定数组的第 32 个字节,即 a[8] .

关于assembly - assembly jmp offset <label+offset> 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38163041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com