GDB程序集无法切换JNS跳转

时间:2016-06-22 12:35:31

标签: debugging assembly x86 gdb

我正在使用GDB调试应用程序。 有一个字符串比较然后跳跃(JNS):

   0x8048410 <main+32>: call   0x8058a70
   0x8048415 <main+37>: add    esp,0x10
   0x8048418 <main+40>: test   eax,eax
   0x804841a <main+42>: jns    0x8048436 <main+70>

测试指令后的堆栈状态如下:

EFLAGS: 0x286 (carry PARITY adjust zero SIGN trap INTERRUPT direction overflow)

大写字母表示标志已激活。 GDB Peda说自从SIGN标志被激活后才进行跳转,至少这是我对JNS指令的理解,跳转到NO SIGN。

我想按照跳转指令,所以我关闭了标志:

set $SF = 7
set $eflags &= ~(1 << $SF)

你可以看到SIGN标志被禁用:

EFLAGS: 0x206 (carry PARITY adjust zero sign trap INTERRUPT direction overflow)

但是gdp peda仍然说没有采取跳跃,而当我实际尝试跳跃时,它不会跳跃。 我对JNS指令的理解是问题还是我错过了其他的东西?

编辑:不知道为什么但是在更改标志后跳转确实有效,但是peda不理解这个改变并且仍然说不会跳转。在写答案之前,我会再检查一下。

0 个答案:

没有答案