X86(X64) 读取rflags的方法

本文介绍了在X86(X64)架构下如何通过LAHF、PUSHF/POP指令读取并打印rflags寄存器的值,详细阐述了低8位和低16位的读取方法。
摘要由CSDN通过智能技术生成

工作中遇到的问题,需要读取rflags的值然后显示的打印出来。

 

翻了SDM的指令卷,找到了LAHF指令,这个指令可以把rflags的值写入AH寄存器中,那么问题来了,AH寄存器只有8位,但是rflags在保护模式或者x64模式是32位/64位的,来看下SDM的说明

可知,确实只截取了rflags的低8位,intel这么做想必也是因为低8位比较常用,编写的代码如下:
 

#include <stdio.h>

#include <stdint.h>

#define LAHF() \
({ \
        uint16_t dst;\
        \
        \
        \
        asm("lahf;"     \
        :"=a"(dst)      \
        :       \
        );      \
        dst;\
})




int main(int argc, char *argv[])
{
        uint16_t res;

        res = LAHF();

        res = res >> 8;

        printf("BSWAP->res : 0x%X\n", res);
}

这样,就可以读取出rflags的低8位了。

 

可是如果不能满足rflags低8位的读取怎么办?再次翻

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值