问题描述
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来组装的,即使它不是。