我正在研究一些逆向工程示例程序(IOLI crackmes)crackme0x00-crackme0x09,它们是gcc编译的ELF格式二进制文件。我是一位同事提供的,可以从radare的github站点下载(我无法添加链接,因为我没有信誉点)。我想我可以提供足够的信息来提出一个格式正确的问题。
我目前正在研究crackme0x09,但遇到了障碍。我主要拆解:
我注意到第一次调用sym.imp.printf是从ebx偏移量引用的寄存器中获取它的输入[ebx - 0x178b]。
该ebx寄存器设置,首先,在fcn.08048766我拆机:

因此,按顺序:1) 0x84从esp
2) 中减去2) ebx设置等于esp包含的位置fcn.08048766:
mov ebx, dword[esp]
3) 0x18f7添加到新值ebx
4) eax加载这个新地址减去和偏移量lea eax, [ebx - 0x178b]
5) 然后推送到堆栈sym.imp.printf上打印
如果我打印程序数据部分中的所有字符串(使用iz命令),我可以在那里看到它们,但是我很难理解如何解释结果:
vaddr=0x08048838 paddr=0x00000838 ordinal=000 sz=5 len=4 section=.rodata type=ascii string=LOLO
vaddr=0x0804883d paddr=0x0000083d ordinal=001 sz=21 len=20 section=.rodata type=ascii string=Password Incorrect!\n
vaddr=0x08048855 paddr=0x00000855 ordinal=002 sz=14 len=13 section=.rodata type=ascii string=Password OK!\n
vaddr=0x08048863 paddr=0x00000863 ordinal=003 sz=6 len=5 section=.rodata type=ascii string=wtf?\n
vaddr=0x08048869 paddr=0x00000869 ordinal=004 sz=25 len=24 section=.rodata type=ascii string=IOLI Crackme Level 0x09\n
vaddr=0x08048882 paddr=0x00000882 ordinal=005 sz=11 len=10 section=.rodata type=ascii string=Password:
我的问题:如何判断引用的字符串[ebx - 0x178b]和后续ebx偏移量?
谢谢。