在objdump反汇编中,像a2f <isValid + 0xb>这样的分支目标意味着什么?

问题描述

0000000000000a24 <isValid>:
 a24:   83 fe 0c                cmp    $0xc,%esi
 a27:   74 06                   je     a2f <isValid+0xb>
 a29:   b8 00 00 00 00          mov    $0x0,%eax
 a2e:   c3                      retq
 a2f:   80 7f 0b 48             cmpb   $0x48,0xb(%rdi)
 a33:   74 06                   je     a3b <isValid+0x17>
 a35:   b8 00 00 00 00          mov    $0x0,%eax
 a3a:   c3                      retq
 a3b:   b8 01 00 00 00          mov    $0x1,%eax
 a40:   c3                      retq

据我了解,它正在比较一些十六进制数字并将一些数字分配给某些变量,但是更具体地说,这些分支目标是什么意思?

a2f <isValid+0xb>
a3b <isValid+0x17>


PS。我的任务的主要目的是对Assembly中objdump的C程序进行逆向工程,以找到该锁的正确密钥,但这只是询问上述片段。

解决方法

更具体地说,这些代码行是什么意思?

a2f <isValid+0xb> a3b <isValid+0x17>

这是跳转指令跳转到的地址。 a2f是十六进制的实际地址。 <isValid+0xb>是反汇编程序,告诉您此地址也是0xb开头之后的isValid个字节。

不要问我,为什么反汇编程序在0x之前而不是在b之前写a2f

注意:a2f太小了,无法成为实际的内存地址,因此大概是加载程序在加载程序时将其添加到某个起始地址。该程序是通过假装起始地址为0来组装的,即使它不是。