如何从可执行文件打开bash
How to open bash from executable?
我正试图从C或C++可执行文件内部打开bash shell(在Linux中)。我尝试了这两种语言,但由于进行系统调用所需的库,编译后的可执行文件超过了4kb。
我需要使可执行文件小于或等于4Kb。我该怎么做?
您是否剥离了程序?此示例代码在使用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编写,不要链接任何库。
如果你只需要执行一个shell,编译
#include<unistd.h>
int main(){
static char* bash[] = {"/bin/bash", NULL};
execv(*bash, bash);
}
使用dietlibc作为diet -Os gcc test.c
生成2929字节的可执行文件。用strip a.out
剥离二进制产生1464个字节。这也有静态链接的好处,这适用于利用漏洞。
相关文章:
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- CMake:如何将库 A 链接到库 B,然后将可执行文件链接到库 A
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何更改使用 CPack 安装的可执行文件的名称?
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 linux 可执行文件中使用静态库
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 编译的C可执行文件被Windows defender检测为病毒
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 是否可以在命令行中将输入参数传递给可执行文件
- Bash 代码,仅在当前可执行文件完成运行时在循环中运行可执行文件
- 如何使用gnu_parallal以运行多个可执行文件和/或bash脚本
- 如何使用CMakeLists.txt为我的可执行文件设置bash中的环境变量
- 将输入值从BASH脚本传递到C 可执行文件
- 如何从可执行文件打开bash