爲了好奇,我試圖讀取國旗寄存器並以良好的方式打印出來。從C程序中讀取國旗寄存器
我試着用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"
對於純彙編問題,請參閱:HTTP:// stackoverflow.com/questions/1406783/flags-registers-can-we-read-or-write-them-directly –