假設有這樣的程式碼
1 2 3 4 5 6 7 8 9 10 |
> cat eflags.c #include <stdint.h> int main(void) { int32_t n = 2147483647; n = n + 1; printf(“%dn”, n); return 0; } |
在 int32_t 的情況下,2147483647 是最大值,加上 1 之後預期 variable n 會 overflow。
我們都知道 CPU 裏面有 FLAGS register 可以表示處理器現在的狀況,那要怎麼在 gdb 裏面顯示呢?
只要在 gdb 裏面打這個指令就會顯示出 FLAGS register 目前的數值。
1 2 |
(gdb) info reg eflags eflags 0xa96 [ PF AF SF IF OF ] |
Full sample
1 2 3 4 5 6 7 8 9 10 |
gcc eflags.c –g –o eflags gdb ./eflags (gdb) b main (gdb) r (gdb) info reg eflags eflags 0x246 [ PF ZF IF ] (gdb) s (gdb) s (gdb) info reg eflags eflags 0xa96 [ PF AF SF IF OF ] |
可以看到 FLAGS register 裏面出現 OF,表示 Overflow flag 立起來了。
Leave a Reply