执行二进制代码

执行二进制代码

我有一个二进制代码,我想运行它。

01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100

如何创建文件“application/x-executable”并在 Debian 上执行它?

答案1

这只是“Hello World”ascii 编码的二进制表示,而不是可执行文件,没有办法执行它。

答案2

那实际上不是可执行代码。它只是 8 位 ASCII 的二进制字符串内容“Hello World”。

既然你要求一个程序,你可以在 C 中执行类似的操作:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


char *bin2str(char *binStr) {
        int len;
        int i = 0; // input cursor
        int j = 0; // binary cursor used to allow spaces in the input
        static char str[256]; // keep it simple and limit the length

        len = strlen(binStr); // avoid recounting every time

        if (len > 256 * 8 - 1) { // impose the limit
                fprintf(stderr, "Error!  Input string too long\n");
                exit(2);
        }

        for (i = 0; i < len; i ++) {
                switch(binStr[i]) {
                        case ' ':
                                continue;
                                break;

                        case '0':
                        case '1':
                                break;  // valid :)

                        default:
                                fprintf(stderr, "Encountered an invalid binary number ('%c') at offset %d!\nAborting\n", binStr[i], i);
                                exit(3);
                }


                if (j % 8 == 0) {
                        str[j / 8] = 0; // initialize char
                }

                if (binStr[i] == '1') {
                        str[j / 8] |= 1 << (7 - (j % 8));
                }

                j ++;
        }

        str[i / 8] = '\0'; // null terminate string

        return str;
}


int main(int argc, char *argv[]) {
        if (argc != 2) {
                fprintf(stderr, "Usage:\t%s binary string\n", argv[0]);
                exit(1);
        }

        printf("Conversion output: \n%s\n", bin2str(argv[1]));

        return 0;
}

答案3

假设十一个由八个零和一组成的序列是字节,这些字节具有以下值:

72 101 108 108 111 32 87 111 114 108 100

这可以很容易地表示一个程序,例如,用于 MOS Technology 6502 等 8 位处理器或 Inmos T800 等 32 位处理器,但 AFAIK 不适用于任何运行 Debian 的处理器(T800 可以运行类似的 Unix)。

将这些值转换为其 ASCII 字符表示形式即可得到 11 个字符的字符串“Hello World”。然而,该字符串不是一个程序。如果您正在寻找生成此类字符串的程序,您可能需要从编译以下 C 程序开始:

#include <stdio.h>

int main()
{
    puts("Hello World");
}

答案4

如果您需要一种解码二进制编码的方法,您可以使用

 perl -ape '$_=pack "(B8)*", @F'

相关内容