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)