相关疑难解决方法(0)

如何更改GDB中的eflags寄存器值?

set $eflags没有改变eflags价值.

eflags例如,旧的价值仍然存在.=>$set $eflag=0x243[这只是一个输入示例].

或者,有没有办法设置个别标志eflags

我正在寻找类似的东西:set ZF[zero flag].有没有gdb命令来做到这一点?

debugging assembly flags gdb

10
推荐指数
2
解决办法
3万
查看次数

在 x86 中设置和清除零标志

在 x86-64 中设置和清除零标志 (ZF) 的最有效方法是什么?

无需具有已知值的寄存器或根本没有任何空闲寄存器即可工作的方法是首选,但如果在这些或其他假设为真时有更好的方法可用,则也值得一提。

performance x86 assembly x86-64 micro-optimization

7
推荐指数
1
解决办法
9148
查看次数

从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;
  }
}
Run Code Online (Sandbox Code Playgroud)

这给出了分段错误.当我运行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"
Run Code Online (Sandbox Code Playgroud)

c x86 assembly flags

6
推荐指数
3
解决办法
6350
查看次数

如何在 x86 程序集中设置或清除溢出标志?

我想编写一个简单的代码(或算法)来设置/清除溢出标志。对于设置 OF,我知道我可以使用有符号值。但我怎么能清除呢?

x86 assembly eflags

5
推荐指数
1
解决办法
6457
查看次数

如何读取x86处理器中的标志寄存器

是否有任何汇编指令让我们直接读取或写入Intel 80386 16位Flags寄存器中的溢出标志?如果没有,我们应该使用什么伪代码?

x86 assembly

4
推荐指数
1
解决办法
5668
查看次数

标签 统计

assembly ×5

x86 ×4

flags ×2

c ×1

debugging ×1

eflags ×1

gdb ×1

micro-optimization ×1

performance ×1

x86-64 ×1