set $eflags没有改变eflags价值.
eflags例如,旧的价值仍然存在.=>$set $eflag=0x243[这只是一个输入示例].
或者,有没有办法设置个别标志eflags?
我正在寻找类似的东西:set ZF[zero flag].有没有gdb命令来做到这一点?
在 x86-64 中设置和清除零标志 (ZF) 的最有效方法是什么?
无需具有已知值的寄存器或根本没有任何空闲寄存器即可工作的方法是首选,但如果在这些或其他假设为真时有更好的方法可用,则也值得一提。
为了好奇,我试图读取标志寄存器并以一种很好的方式将其打印出来.
我已经尝试使用gcc的asm关键字阅读它,但我无法让它工作.任何提示如何做到这一点?我正在运行Intel Core 2 Duo和Mac OS X.以下代码就是我所拥有的.我希望能告诉我是否发生溢出:
#include <stdio.h>
int main (void){
int a=10, b=0, bold=0;
printf("%d\n",b);
while(1){
a++;
__asm__ ("pushf\n\t"
"movl 4(%%esp), %%eax\n\t"
"movl %%eax , %0\n\t"
:"=r"(b)
:
:"%eax"
);
if(b!=bold){
printf("register changed \n %d\t to\t %d",bold , b);
}
bold = b;
}
}
Run Code Online (Sandbox Code Playgroud)
这给出了分段错误.当我运行gdb时,我得到了这个:
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x000000005fbfee5c
0x0000000100000eaf in main () at asm.c:9
9 asm ("pushf \n\t"
Run Code Online (Sandbox Code Playgroud) 我想编写一个简单的代码(或算法)来设置/清除溢出标志。对于设置 OF,我知道我可以使用有符号值。但我怎么能清除呢?
是否有任何汇编指令让我们直接读取或写入Intel 80386 16位Flags寄存器中的溢出标志?如果没有,我们应该使用什么伪代码?