2

我目前正在使用 GDB 和 NASM 进行汇编编程。

不幸的是,我无法在 GDB 中看到 EFlags 寄存器助记符(ZF、AF、PF 等)。

我正在显示一个十进制值:eflags 0x246 582

我确信我可以将十进制转换为二进制并自己计算标志,但这对于其他人似乎都有的功能来说似乎需要做很多工作?

操作系统:Mountain Lion 10.8.2

GDB 版本:

GNU gdb 6.3.50-20050815 (Apple version gdb-1824) (Thu Nov 15 10:42:43 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".
4

2 回答 2

2

您的 gdb 版本非常旧。如果它没有实现该功能,这是我用来打印 eflags 内容的 gdb 函数:

define eflags
    printf "     OF <%d>  DF <%d>  IF <%d>  TF <%d>",\
           (($eflags >> 0xB) & 1), (($eflags >> 0xA) & 1), \
           (($eflags >> 9) & 1), (($eflags >> 8) & 1)
    printf "  SF <%d>  ZF <%d>  AF <%d>  PF <%d>  CF <%d>\n",\
           (($eflags >> 7) & 1), (($eflags >> 6) & 1),\
           (($eflags >> 4) & 1), (($eflags >> 2) & 1), ($eflags & 1)
    printf "     ID <%d>  VIP <%d> VIF <%d> AC <%d>",\
           (($eflags >> 0x15) & 1), (($eflags >> 0x14) & 1), \
           (($eflags >> 0x13) & 1), (($eflags >> 0x12) & 1)
    printf "  VM <%d>  RF <%d>  NT <%d>  IOPL <%d>\n",\
           (($eflags >> 0x11) & 1), (($eflags >> 0x10) & 1),\
           (($eflags >> 0xE) & 1), (($eflags >> 0xC) & 3)
end
document eflags
Print EFLAGS register. (x86)
end
于 2013-03-12T11:05:42.553 回答
0

要查看设置的标志:

info registers eflags
于 2013-03-12T11:04:45.427 回答