学习
实践
活动
专区
工具
TVP
写文章

MIPS架构深入理解2-MIPS架构体系

对于MIPS指令集架构描述最好的,肯定是MIPS公司出版的MIPS32和MIPS64架构规范。MIPS32是MIPS64的一个子集,用于描述具有32位通用目的寄存器的CPU。 为了简单,我们缩写为MIPS32/64。 生产MIPS架构CPU的公司,尽量兼容MIPS32/64规范。 在MIPS32/64规范之前,已经发布了多版的MIPS架构。 MIPS II: 为没有投产的MIPS-R6000机器定义的指令集。MIPS-II是MIPS32的前身。 MIPS III: 为R4000引入的64位指令集。 MIPS32、MIPS64: 1998年,由从Silicon Graphics公司分拆出来的MIPS Technologies Inc.公司制定的标准。 MIPS32是MIPS-II的超集,MIPS64是MIPS-IV的超集(还以可选的方式包含了MIPS-V的大部分)。 大多数1999年之后设计的MIPS架构CPU都兼容这些标准。

58820

从一道mips题目学习搭建mips环境及ROP

本文以一道简单的mips pwn题,讲解mips环境搭建及mips ROP的构造。 32位的;LSB表示是小端,如果是MSB则表示大端;MIPS32 version 1 (SYSV)表示MIPS的版本,MIPS版本有MIPS32/64、MIPS I到V等等;题目是动态链接的,所以我们需要对应的动态链接库 直接运行程序是运行不起来的,这是因为mips架构的elf文件需要在mips环境中才能运行,而且还需要相应的动态链接库。所以下面我们来一起搭建mips环境。要注意题目是什么环境,搭建的就得是什么环境。 mips $ sudo ifconfig ens33 down mips $ sudo brctl addbr virbr0 mips $ sudo brctl addif virbr0 ens33 mips $ sudo brctl stp virbr0 off mips $ sudo brctl setfd virbr0 1 mips $ sudo brctl sethello virbr0

1.3K20
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MIPS架构深入理解1-MIPS和RISC架构体系介绍

    MIPS领域最无法忽视的贡献者是Stanford大学的MIPS项目。 1.2 MIPS架构5级流水线 图1.2: MIPS-5级流水线 MIPS本身就是基于流水线优化设计的架构,所以,将MIPS指令分为5个阶段,每个阶段占用固定的时间,在此,固定的时间其实就是处理器的时钟周期 (MIPS架构的汇编也是最简单易懂的代码之一) 尽管有这些问题,但是MIPS架构的设计者也在思考,如何使CPU可以被编译器更加简单高效地优化。 1.4 MIPS架构的发展 纵观MIPS架构的近40年的发展历程,虽经历过辉煌,但现在也日渐式微。网上有许许多多关于MIPS架构的评论或者见解。笔者对于市场一窍不通,故不在此班门弄斧。 按照约定,MIPS架构也保留了2个通用寄存器,让异常程序可以自举(在MIPS架构的CPU上,不使用寄存器是无法工作的)。

    1.9K11

    MIPS架构深入理解10-向MIPS移植软件之内存序

    牛顿 这是向MIPS架构移植软件的问题系列之第三篇。 在前两篇文章 *《MIPS架构深入理解8-向MIPS架构移植软件之大小端问题》 *《MIPS架构深入理解9-向MIPS移植软件之Cache管理》 中,我们分别讨论了大小端模式和Cache对于移植代码的影响 MIPS架构提供了sync指令实现这个目的,它可以确保sync指令之前的访问先于之后的执行。 对于sync指令的详细使用方法,可以参考《MIPS指令集参考大全》一文。 不同的体系架构对执行顺序作出了不同的规定。 比如,一个运行MIPS代码的CPU,实际上运行的store指令大约占所有指令的10%左右;但是,往往是突发式访问,比如函数的调用过程中,首先需要压栈操作一组寄存器的值。

    19210

    MIPS架构深入理解9-向MIPS移植软件之Cache管理

    牛顿 这是向MIPS架构移植软件的问题系列之第二篇。上一篇《MIPS架构深入理解8-向MIPS架构移植软件之大小端问题》中,我们讨论了大小端对于移植代码的影响。 为此,MIPS架构提供了Cache指令,可以根据需要调用它们,消除这种内存和Cache的不一致性。 移植性比较好的操作系统,比如Linux,不管是复杂的、不可见的Cache,还是简单的Cache,都能很好的适配。即,Linux一般提供一组很完备的API,供驱动编写者使用。 所以,MIPS32/64提供了synci指令,它可以执行D-Cache的回写操作和I-Cache的失效操作。具体可以参考MIPS指令集参考。 比如说,Linux操作系统,多个虚拟地址可能都会访问一个物理页(共享库)。

    29910

    MIPS架构深入理解11-向MIPS移植软件之编程语言

    牛顿 这是向MIPS架构移植软件的问题系列之第四篇。 在前三篇文章 *《MIPS架构深入理解8-向MIPS架构移植软件之大小端问题》 *《MIPS架构深入理解9-向MIPS移植软件之Cache管理》 *《MIPS架构深入理解10-向MIPS移植软件之内存序 详细的使用方法可以参考GCC手册中关于MIPS架构的部分章节内容。 3 在MIPS架构上使用C编写程序时的一些其它问题 负指针 当在MIPS架构上运行比较简单的程序时,一般直接运行在非映射内存区,也就是kseg0或kseg1区域时,所有32位数据指针的最高位都置1,看起来像是一个负数 堆栈的使用 尽管MIPS架构缺乏对堆栈的支持,但是MIPS-C编译器还是实现了一个常规的栈结构,主要就是按照某种约定,指定通用寄存器作一些特殊的用途,比如使用哪几个寄存器传递函数参数,使用哪个寄存器作为

    23830

    汇编语言之MIPS汇编

    简介咱们知道x86架构cpu用于PC端和工作站较多,ARM架构cpu常见于手机和单片机,那么MIPS架构的cpu主要在哪些设备可以找到它们的身影呢? 中国龙芯PS游戏机学习环境搭建安装JDK, 主要用于运行mips模拟器marsMARS模拟器:https:courses.missouristate.eduKenVollmarmarsdownload.htm 寄存器在mips中通用寄存器用$开头表示,一共有32个寄存器编号寄存器名寄存器用途$0$zero永远返回0$1$at保留寄存器2-3v0-v1一般用于存储表达式或者函数的返回值(value的简写)4-7a0 MIPS汇编中的分段处理.data #数据段 .text #代码段传送指令加载立即数指令 lili(load immediate) :用于将立即数传送给寄存器li $t0,1 ;十六进制数据使用0x前缀表示加载地址指令 add: add $v1,$a1,$a2 jr $ra嵌套函数栈操作栈空间拉伸和平衡入栈和出栈嵌套函数使用栈保护$ra代码示例内存空间布局从mars中可以查看到内存分布起始物理地址转成图后:栈的伸缩在mips

    1.3K30

    MIPS架构深入理解8-向MIPS移植软件之大小端模式

    而像Linux系统,在编写应用或者系统软件的时候,一般都会考虑可移植性。所以说,基于Linux的软件一般都可以直接编译使用。 但是,对于MIPS架构来说,有些事情可能使用汇编语言编写更好。讲解这部分内容的时候,主要涉及inline汇编、内存映射I/O寄存器和MIPS架构可能出现的各种缺陷。 MIPS架构CPU可以支持大小端两种模式,需要上电时进行配置。 5 在MIPS架构上编写支持任意字节序的软件 你可能会想,我是否可以写一个正确运行在MIPS CPU上的程序,不论它被配置为大端模式,还是小端模式。或者编写一个可以运行在任意配置的板子上的驱动程序。 正是这个特性使得MIPS CPU能够配置大小端工作模式。当你重新配置MIPS CPU的字节序时,正是改变了这个操纵数据加载的硬件逻辑单元的行为。

    42610

    MIPS漏洞调试环境安装-栈溢出

    jeb mips也有rop插件,名字是PleaseROP。 MIPS交叉编译环境环境安装 buildroot是Linux平台上一个构建嵌入式Linux系统的框架。 在出现界面后,选择第一项“Target Architecture”,改成MIPS(little endian),另外,选择“Toolchain”,务必将“Kernel Headers”的Linux版本改成你自己主机的 Linux版本(因为我们编译出的MIPS交叉工具是需要在我们的主机上运行的) 5. 经过约一小时,编译完成后,在buildroot文件夹下多了一个output文件夹,其中就是编译好的文件,可以在buildroot/output/host/usr/bin找到生成的交叉编译工具,编译器是该目录下的mips-linux-gcc { if(argc<2){ printf("need more argument\n"); return 1; } vul(argv[1]); return 0;} 静态编译生成二进制文件mips-linux-gcc

    87350

    DDCTF 2018 逆向 baby_mips Writeup

    所以对MIPS指令有一定研究,而在DDCTF 2018中刚好有一道逆向题目是MIPS程序,于是尝试做了一下。 0x01 环境搭建 由于我们通常的操作系统指令集都是x86的,所以无法跑MIPS程序。 由于MIPS架构有两种——大端MIPS和小端MIPS。所以,我们需要确定这个程序是大端MIPS还是小端MIPS。 ? ELF 32-bit LSB很明显,这个程序是32位小端的MIPS。 所以,我们使用qemu-mipsel baby_mips来运行这个程序。 因为我们需要远程调试MIPS程序,所以要加上-g 端口参数,qemu-mipsel -g 1234 baby_mips,此时用IDA pro就可以通过Remote GDB Server来调试这个MIPS 然后,为了方便我们了解key比对函数的功能,我们可以需要对MIPS进行反编译,目前可以反编译MIPS程序的工具有两个。 Retdec JEB-mips 我们首先使用Retdec来反编译该程序 ?

    1.1K50

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • X-P2P

      X-P2P

      腾讯云X-P2P以新一代的 P2P 技术为核心,充分利用边缘计算存储能力和整体网络闲置带宽,结合音视频 SaaS 服务,提供给客户更好用户体验、更高性价比的流媒体方案。客户通过客户端集成 SDK,能够获得更流畅播放体验并显著降低分发成本,适用于互动直播、电视内容直播、赛事直播、在线视频、短视频等业务场景。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券