为了满足好奇心,我正在尝试读取标志寄存器并以一种好的方式打印出来。
我尝试使用gcc的 asm 关键字读取它,但是我无法使其工作。有什么提示如何做到这一点吗?我正在运行Intel Core 2 Duo和Mac OS X。以下是我拥有的代码。我希望它能告诉我是否发生了溢出:
这会导致段错误。运行gdb时,出现以下信息:
我尝试使用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;
}
}
这会导致段错误。运行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"