首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改GDB中的e之母注册值?

如何更改GDB中的e之母注册值?
EN

Stack Overflow用户
提问于 2013-03-15 18:56:37
回答 4查看 42.8K关注 0票数 15

set $eflags不更改eflags值。

在eg之后,旧的eflags值仍然保持不变。=>$set $eflag=0x243 --这只是一个示例输入。

或者,是否有任何方式设置eflags的单个标志?

我在找类似的东西:set ZF[zero flag]。有一个gdb命令来完成这个任务吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-18 14:35:18

代码语言:javascript
复制
set ($eflags)=0x243

在我的测试中为任何十六进制值工作过。

票数 7
EN

Stack Overflow用户

发布于 2015-07-10 11:15:23

没有括号的set $eflags适用于GDB 7.7.1

若要设置单个标志,请使用其索引。例如,ZF是第6位,所以我们可以用:

代码语言:javascript
复制
set $ZF = 6                 # define a GDB variable: no effect on registers
set $eflags |= (1 << $ZF)   # set bit 6 in EFLAGS, the ZF bit.

或者直接:

代码语言:javascript
复制
set $eflags |= (1 << 6)      

所有其他按位操作也是如此:How do you set, clear, and toggle a single bit?

代码语言:javascript
复制
# Clear
set $eflags &= ~(1 << $ZF)

# Toggle
set $eflags ^= (1 << $ZF)

造成混淆的原因是,许多位要么被保留,要么不能被任何指令直接修改,或者不能从用户模式中被修改,请参见:How to read and write x86 flags registers directly?和所以GDB不接触它们。

例如:

代码语言:javascript
复制
(gdb) set $eflags = 0
(gdb) i r eflags
eflags         0x202    [ IF ]
(gdb) set $eflags = 0xFFFFFFFF
(gdb) i r eflags
eflags         0x54fd7  [ CF PF AF ZF SF TF IF DF OF NT RF AC ]

二进制文件中的0x202是:

代码语言:javascript
复制
0010 0000 0010

二进制文件中的0x54fd7是:

代码语言:javascript
复制
0101  0100 1111 1101 0111

通过查看手动http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1-manual.pdf和GDB源代码,TODO理解了为什么设置了这些位。

我理解的是:

  • 所有保留寄存器均按固定值保留: 1位为1位,3位为0位,5位为15位,22-31位为0。
票数 24
EN

Stack Overflow用户

发布于 2017-11-05 00:27:12

eflags寄存器中设置所有标志是错误的。所以有些位是保留的,必须是0。(3,5,15,22及更高)位1必须是1。还有rflags。但是所有的hi dword都是零。因此,对于所有更改的操作,不需要使用rflags而不是eflags。但我知道有些人会用免费的比特来自用。

比较合适的rflags hi dword。因此,在64位结构中,有足够的空闲寄存器来使用。但在32位架构中,没有。所以强烈建议这么做。

因为在未来的体系结构中,可能会使用其中的一些比特。但是,这些标志不会从32位更改为64位。如果唯一可以完全不更改的寄存器。所以所有可能的理由都已经用过了。我不认为任何情况下可能会使用一些额外的标志,直到现在才使用。它可能是对某些主要处理器架构的改变。我不认为有些人决定这么做是因为显而易见的原因,所有的软必须从一开始就被丢弃和重写。这是一项艰巨而艰巨的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15440154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档