十三、MIPS汇编指令-main函数

十三、MIPS汇编指令-main函数本次的分享 我们将以一段简单的 C 语言程序为例 使用 mips linux 的 gcc 编译器对其进行编译后 使用 ida 对编译后的程序进行反汇编 并通过对照 C 语言代码的方式理解 MIPS 汇编指令

大家好,欢迎来到IT知识分享网。

在这里插入图片描述
本次的分享,我们将以一段简单的C语言程序为例,使用mips-linux的gcc编译器对其进行编译后,使用ida对编译后的程序进行反汇编,并通过对照C语言代码的方式理解MIPS汇编指令。

首先我们来看这段C代码(test.c):

#include <stdio.h> #include <string.h> void B() { 
    printf(".....\n"); } void A(char *content) { 
    char buf[32]; strcpy(buf, content); printf("buf: %s\n", buf); B(); } void main(int argc, char **argv) { 
    A(argv[1]); } 

在代码中,main函数直接调用A函数,并将第一个命令行参数作为函数A的参数传递过去,在函数A中,使用strcpy函数将参数保存到局部变量buf中,然后是使用printf函数打印buf变量。最后函数A调用了函数B,在函数B中只是简单的调用了printf函数打印了一串字符串常量。

我们使用mips-linux-gnu-gcc命令将源码编译,得到名为test的可执行文件:

$ mips-linux-gnu-gcc -static test.c -o test 

编译后,使用qemu-mips命令执行这个test程序:

$ cp /usr/bin/qemu-mips-static . $ ./qemu-mips-static ./test AAAAAAAA buf: AAAAAAAA ..... 

可以看到,我们编译的程序是可以正常运行的。

我们通过今天分享,通过将我们自己编写的C代码编译为mips-linux架构的程序,并使用IDA对其进行逆向分析,初探了MIPS汇编代码。对于繁杂的汇编代码,看似要记住的指令有很多,但它们不过是一些英文单词的缩写组合而成的。比如add代表加法、i代表Immediat,就是立即数、u代表unsigned,就是无符号、lw中的l代表load,就是加载的意思,w代表word,就是4个字节的意思、jal指令中的j代表jump,就是跳转的意思、a代表address,就是跳转到某个地址的意思、l代表long,就是跳转的地址距离jal这条指令很远的意思(这个l代表long纯属乱猜,只是为了方便自己记忆)。

希望本节的分析能够为你打开进入MIPS汇编世界的大门。下次分享中,我们会继续通过分析main函数调用的A函数的反汇编代码,以此来增强我们对汇编语言的理解。

最后希望本次的分享能够为你带来帮助,谢谢大家。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136568.html

(0)
上一篇 2025-06-26 16:45
下一篇 2025-06-26 17:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信