windows系统上如何运行mips程序

windows系统上如何运行mips程序,第1张

实际上 MinGW 并不是一个 单纯的C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC 以外,MinGW 还包含有一些其他的 GNU 程序开发工具 (比如 gawk bison 等等)。

开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) *** 作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境。

所以,使用 MinGW 我们就可以像在 Linux 下一样使用 GNU 程序开发工具。

GCC 就是 MinGW 的核心所在,GCC 是一套支持众多计算机程序语言的编译系统,而且在语言标准的实现上是最接近于标准的。并且 GCC

几乎可以移植到目前所有可用的计算机平台。(我的电脑上就还装有 DevKitPro,里面包含

内存主要分为代码段,数据段和堆栈。代码段放程序代码,属于只读内存。数据段存放全局变量,静态变量,常量等,堆里存放自己malloc或new出来的变量,其他变量就存放在栈里,堆栈之间空间是有浮动的。数据段的内存会到程序执行完才释放。调用函数先找到函数的入口地址,然后计算给函数的形参和临时变量在栈里分配空间,拷贝实参的副本传给形参,然后进行压栈 *** 作,函数执行完再进行d栈 *** 作。字符常量一般放在数据段,而且相同的字符常量只会存一份

硬件平台是什么?pc上还是51上或者arm,mips?不

同硬件平台汇编不同,编译器对程序的处理也就不同。

用汇编一般都是考虑到可以直接访问寄存器,速度有优势,但最大的缺点是不能跨平台,可移植性很差。

伪指令是合法的MIPS汇编语言指令,没有直接的硬件实现。它们是为了方便程序员而提供的。当你在MIPS汇编语言程序中使用伪指令时,汇编器将它们转换为等效的真正的MIPS指令。

例如:

得到字符串长度,存入寄存器以计数,得到最后一个字符的地址,将最后一个字符移到新串的第一的位置,地址减一,字串长度计数器减一,判断计数器是否为0,不为0,重复移动字符,为零退出循环

然后按顺序显示字符串的方式显示

安装可以参考我写的另一篇文章,不过也就几条命令。 链接

使用 from pwn import 将所有的模块导入到当前namespace,这条语句还会帮你把os,sys等常用的系统库导入。

常用模块如下:

汇编:

可以使用context来指定cpu类型以及 *** 作系统

使用disasm进行反汇编

注意,asm需要binutils中的as工具辅助,如果是不同于本机平台的其他平台的汇编,例如在我的x86机器上进行mips的汇编就会出现as工具未找到的情况,这时候需要安装其他平台的cross-binutils。

结合asm可以可以得到最终的pyaload。

除了直接执行sh之外,还可以进行其它的一些常用 *** 作例如提权、反向连接等等。

pack:p32,p64

unpack:u32,u64

使用ROP(elf)来产生一个rop的对象,这时rop链还是空的,需要在其中添加函数。

因为ROP对象实现了 getattr 的功能,可以直接通过func call的形式来添加函数,ropread(0, elfbss(0x80))实际相当于ropcall('read', (0, elfbss(0x80)))。

通过多次添加函数调用,最后使用str将整个rop chain dump出来就可以了。

Exploit利器——Pwntools

pwntools官网

把C语言代码转换为MIPS:

以下是c语言代码:

while (candidate_gcd <= min)

{

if (((a mod candidate_gcd) == 0) &&((b mod candidate_gcd) ==

0))

{

current_gcd = candidate_gcd;

}

candidate_gcd = candidate_gcd + 1;

}

以下为转换为mips后的代码:

首先设置变量:

candidate_gcd = $t0

min = $t1

a mod candidate_gcd = $t2

b mod candidate_gcd = $t3

current_gcd = $t4

$t6 = 0

$t5

代码如下:(绿色为注释)

Label3: //设置标签Label3

ble $t0,$t1,Label //当$t0 小于等于$t1 时,跳到标签Label

Label: //设置标签Label

Add $t5,$t2,$t3 //将$t2 和$t3 相加赋值给$t5

Li $t6,0 //给$t6 赋值为0

Leq $t5, $t6,Label1 //判断如果$t6=$t5=0,跳到标签Label1

Label1: //设置标签Label1

Move $t4, $t0 //$t4=$t0

Addi $t0, $t0,1 //$t0=$t0+1(自加加)

J Label3 //跳到标签Label3,这里其实就是实现c 语言

中的while 无限循环

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12176967.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存