zoukankan      html  css  js  c++  java
  • mips32和x86下的大小端模式判定

    一.背景

    1.1 mips32搭载32bit vxworks操作系统

    1.2 x86搭载64bit windows10操作系统

    二.大小端模式判定前的准备

    2.1 先要知道各种架构上各种整型数占据的bit数,也就是通过范围来确定bit数

    上一篇已经讲过,特奉上地址如下:

    http://www.cnblogs.com/dakewei/p/7690847.html

    2.2 mips32上的判定

    代码如下:

    #include <stdio.h>

    void main(void)

    {

      unsigned long int ul = 1;

      unsigned char *p = &ul;

      p += (sizeof(unsigned long) - 1); /*因为mips32上unsigned long 类型占据了32个bit,因此移动3个字节,以便到达最后一个字节*/

      printf("*p = %d,p = %p,ul = %d,&ul = %p ",*p,p,ul,&ul);

    }

    运行结果如下:

    *p = 1,p = 0x80cf3fcb,ul = 1,&ul = 0x80cf3fc8  

    对运行结果进行分析如下:

    先回忆大小端的定义:

    大端模式: 低位数据存储在高地址

    小端模式:低位数据存储在低地址

    那么内存中数据的存放情况如下:

                       -------------------

    0x80cf3fc8  |    0x00         |

         --------------------

    0x80cf3fc9  |    0x00         |

            --------------------

    0x80cf3fca |      0x00        |

                      --------------------

    0x80cf3fcb |     0x01         |

                      --------------------

    由此可以判定:笔者的mips32机器是大端机器(笔者的这台mips32机器是可以设置大小端的)

    2.3 x86上的判定

    代码如下:

    #include <stdio.h>

    void main(void)

    {

      unsigned long int ul = 1;

      unsigned char *p = &ul;

      p += (sizeof(unsigned long) - 1); /*因为x86上unsigned long 类型占据了64个bit,因此移动7个字节,以便到达最后一个字节*/

      printf("*p = %d,p = %p,ul = %d,&ul = %p ",*p,p,ul,&ul);

    }

    运行结果如下:

    *p = 0,p = 0xffffcc07,ul = 1,&ul = 0xffffcc00

    对运行结果进行分析如下:

    先回忆大小端的定义:

    大端模式: 低位数据存储在高地址

    小端模式:低位数据存储在低地址

    那么内存中数据的存放情况如下:

                       -------------------

    0xffffcc00  |    0x01         |

         --------------------

    0xffffcc01 |    0x00         |

            --------------------

    0xffffcc02 |      0x00        |

                      --------------------

    0xffffcc03 |     0x00        |

                      --------------------

    0xffffcc04  |    0x00         |

         --------------------

    0xffffcc05 |    0x00         |

            --------------------

    0xffffcc06 |      0x00        |

                      --------------------

    0xffffcc07 |     0x00         |

                      --------------------

    由此可以判定:笔者的x86机器是小端机器

  • 相关阅读:
    csp-s 92
    支持smtp/imap smtp/pop3的撞库python撞库脚本
    关于KB2839299 微软补丁前后的kifastcallentry
    (转载)RegSetValueEx设置REG_SZ类型键值时要注意的问题
    x64windows安全机制进程_线程_模块加载回调摘要
    windbg脚本实践3----监控特定进程创建
    windbg脚本实践2----监控特定注册表键值创建和删除
    windbg脚本实践1----监控特定文件创建 删除 读写
    纪念在乙方安全公司的2年_关于杀毒软件和远控的斗争
    文件删除的windows下面的三种路径(轻量级)
  • 原文地址:https://www.cnblogs.com/dakewei/p/7699429.html
Copyright © 2011-2022 走看看