zoukankan      html  css  js  c++  java
  • 利用“.byte”在嵌入式汇编中直接插入机器码

    最近做的工作需要截获page_fault异常处理,需要模仿着原来的page fault异常处理例程写一个自己的异常处理例程。这个异常处理例程有一部分是汇编代码写的。反汇编原来的内核,发现这样一条指令

    66 66 90    data32 xchg %ax, %ax

    但是在汇编中,直接用

    asm("data32 xchg %ax, %ax);

    的方式没有办法编译通过。编译器总是报告:`data32' is not supported in 64 bit system. 而直接

    asm("xchg %ax, %ax");

    编译之后的汇编代码则只是66 90。

    尝试了不少办法,最终去追踪内核代码,发现可以用这种方式来实现

    asm(".byte 0x66");
    asm("xchg %ax, %ax");

    最终编译出来的代码,果然就是66 66 90。

    用这种方法就可以实现直接在嵌入式汇编中硬编码机器码。在某些场合,比如底层机器新增加了指令,而编译器还没有做相应的扩展,使用这种方法可以达到使用新指令的目的。

  • 相关阅读:
    懒懒的~~
    BigDecimal,注解
    遇到的一点问题些
    npm一点点
    TortoiseSvn问题研究(一)
    关于maven-基本
    HttpServletRequest二三事
    学习迭代1需求分析
    FMDB简单使用
    计算机中的事务、回滚
  • 原文地址:https://www.cnblogs.com/richardustc/p/3052897.html
Copyright © 2011-2022 走看看