busybox命令映射之旅(原创)

什么是busybox

BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。它很小,只有1M+,却几乎可以运行所有的Linux命令,且易移植,是嵌入式开发的利器,它被称为Linux的瑞士军刀。

准备工作

下载busybox官网

运行方式

比如放到安卓手机上运行,我们都知道虽然安卓是基于linux内核的,但命令被阉割得少到可怜,如果安装上busybox,将为手机增加了三百多个linux命令,代价也小,因为它真的很小(但运行起来,受到限制,它必须依赖于busybox 这个命令),使用这个命令前先把这个busybox可执行文件配置到环境变量中,比如要运行linux的ls命令:busybox ls, 忘了说的是busybox还有一个特点,就是将busybox这个可执行文件重命名为对应的linux命令名称,运行它就会是这个命令的效果,比如将busybox可执行文件重命名为ls,我们在终端直接输入ls,便可以直接运行它,不用busybox ls这么麻烦了,而且也为其他程序提供了命令环境,但busybox总共有三百多个命令,如果每个命令都这样做,那么代价会很大,从一M增大到了三百多M的存储空间。ps:busybox是C语言写的,busybox通过不同的文件名运行不同命令的原理其实很简单,int main(int argc,char*argv)这个程序入口的第一个参数是终端传递过来的参数个数,第二个参数就是终端传递过来的内容,argv[0]就是当前被执行的文件名本身,busybox就是根据这个来实现不同文件名执行不同的命令。

busybox命令映射

将以下代码编译为可执行文件,并将它重命名为busybox的各种命令的名称,我们将它统一放到bin/目录下,方便我们配置环境变量,这时bin目录下的文件总共有三百多个了,其实就两个文件,busybox本身和下面程序的可执行文件,只是文件名不同罢了,文件名就是busybox的命令名称。通过命令映射就可以降低代价,实现相同的效果

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[]){
       char *busybox=(char*)malloc(sizeof(8));
       strcpy(busybox,"busybox");
       for(int i=0;i<argc;i++){
        strcat(busybox," ");
        strcat(busybox,argv[i]);
       }
       system(busybox);  
       printf("\n===busybox命令映射 by mythoi=====\n\n");     
       return 0;
    }

完结

第一次写简书,排版布局不熟练,描述的也不是很清晰。希望大家多多支持

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,944评论 9 468
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,188评论 2 33
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,954评论 0 5
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,384评论 0 27
  • 黑马脚本引流科技,最直接有效的引流方法通过社交平台进行话术引流脚本引流最直接最有效的引流方式,开发者 实操:如何利...
    烟雨繁城阅读 4,264评论 0 0