Assembly 二元炸弹第二阶段组装
我正在进行二元炸弹任务的第二阶段。在线Assembly 二元炸弹第二阶段组装,assembly,x86,gdb,reverse-engineering,Assembly,X86,Gdb,Reverse Engineering,我正在进行二元炸弹任务的第二阶段。在线程序比较%eax寄存器和内存位置的内容值(%rsp+4*%rbx)。两个值都等于5;但是,程序不会跳转到第行,而是转到函数。我做错了什么?作为这一阶段的输入,我输入了41236 您能不能在je停车,也可以在p$eflags停车?也要执行x/wd$rsp+$rbx*4以避免可能的指针缩放问题。(gdb)p$eflags$1=[CF PF AF SF IF](gdb)x/wd$rsp+$rbx*4 0x7FFFFFD6E4:1请参见,这就是问题所在。我假设强制
程序比较%eax
寄存器和内存位置的内容值(%rsp+4*%rbx)
。两个值都等于5;但是,程序不会跳转到第
行,而是转到
函数。我做错了什么?作为这一阶段的输入,我输入了41236
您能不能在
je
停车,也可以在p$eflags
停车?也要执行x/wd$rsp+$rbx*4
以避免可能的指针缩放问题。(gdb)p$eflags$1=[CF PF AF SF IF](gdb)x/wd$rsp+$rbx*4 0x7FFFFFD6E4:1请参见,这就是问题所在。我假设强制转换到(int*)
激活了C指针缩放。汇编使用字节寻址,这是指令中出现*4
的实际原因。因此,您刚才看到的位置与指令访问的位置不同。如果您不喜欢x
,您可能会将强制转换放在最后,例如p*(int*)($rsp+$rbx*4)
。或者您可以放下*4
并执行p*((int*)$rsp+$rbx)
。