rust 如何在GDB中从eflags中提取字段值

doinxwow  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(110)

在gdb x86_64环境中,就像下面的例子,当我试图提取$eflags的字段值作为断点条件元素时,我得到了一个错误。

(gdb) cond 1 ($eflags & 0x200) != 0
(gdb) continue
Continuing.
Error in testing breakpoint condition:
Invalid cast.
[Switching to Thread 1.1]

当然,当提取$eflags的特定字段(如p $eflags & 0x200)时,我也得到了Invalid cast错误。
如何从$eflags中获取特定字段?
我不知道这是否相关,我调试了一个生 rust 的程序。

    • 环境**
  • uname-a:Linux Ubuntu Mac 5.15.0 - 56-通用#62-Ubuntu SMP 11月22日星期二19:54:14 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
  • Ubuntu版本:22时04分
  • CPU:英特尔(R)酷睿(TM)i5 - 5250U CPU(1.60 GHz)
  • gdb版本:GNU通用数据库(Ubuntu 12.1 - 0ubuntu1~22.04)12.1

谢谢。

s3fp2yjn

s3fp2yjn1#

第一个月
这不起作用,因为:

(gdb) ptype $eflags
type = flag i386_eflags {
    bool CF @0;
    bool @1;
    bool PF @2;
    bool AF @4;
    bool ZF @6;
    bool SF @7;
    bool TF @8;
    bool IF @9;
    bool DF @10;
    bool OF @11;
    bool NT @14;
    bool RF @16;
    bool VM @17;
    bool AC @18;
    bool VIF @19;
    bool VIP @20;
    bool ID @21;
}

但是,您可以将$eflags转换为int

(gdb) p $eflags
$1 = [ IF ]
(gdb) p/x (int)$eflags
$2 = 0x202
(gdb) p/x (int)$eflags & 0x2
$3 = 0x2

相关问题