如何从可执行文件中打开bash?

时间:2012-01-29 05:50:06

标签: c++ c linux bash

我试图从C或C ++可执行文件中打开一个bash shell(在Linux中)。我尝试了两种语言,但由于系统调用所需的库,编译后的可执行文件超过4kb。

我需要使可执行文件小于或等于4Kb。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

你剥离了你的程序吗?此示例代码使用C和C ++提供小于4K的内容:

$ cat shell.c
#include <stdlib.h>

int main() {
  system("echo hello");
  return 0;
}
$ gcc -o shell shell.c
$ strip -s shell
$ ./shell
hello
$ du -b shell
2836    shell
$ g++ -o shell shell.c
$ strip -s shell
$ ./shell
hello
$ du -b shell
3216    shell

当然,您可以将可执行文件缩小。将它写在asm中,不要链接任何库。

答案 1 :(得分:2)

如果你需要做的就是执行一个shell,编译

#include<unistd.h>

int main(){
    static char* bash[] = {"/bin/bash", NULL};
    execv(*bash, bash);
}

dietlibcdiet -Os gcc test.c,产生2929字节的可执行文件。使用strip a.out剥离二进制文件会产生1464个字节。这也具有静态链接的好处,适用于漏洞利用。