Executa o código binário

2

Eu tenho um código binário e quero executá-lo.

01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100

Como posso criar um arquivo "application / x-executable" e executá-lo no Debian?

    
por Gab 13.05.2016 / 16:59

4 respostas

20

Isso é apenas a representação binária da codificação ascii de "Hello World", não um executável, não há como executar isso.

    
por 13.05.2016 / 17:20
3

Isso não é realmente um código executável. É simplesmente o conteúdo da string binária "Hello World" em 8 bits ASCII.

Já que você pede por um programa, você pode fazer algo assim em 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] = '
#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] = '%pre%'; // 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;
}
'; // 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; }
    
por 13.05.2016 / 17:55
3

Supondo que as onze sequências de oito zeros e uns são bytes, esses bytes têm os valores:

72 101 108 108 111 32 87 111 114 108 100

Isso poderia representar facilmente um programa, por exemplo, para um processador de 8 bits como o MOS Technology 6502 ou um processador de 32 bits como o Inmos T800, mas AFAIK não para qualquer processador rodando Debian (o T800 pode rodar um Unix) ).

Convertendo os valores para sua representação de caracteres ASCII, você recebe a string de 11 caracteres "Hello World". Essa string, no entanto, não é um programa. Se você estiver procurando por um programa que gere uma string, você pode querer começar com a compilação do seguinte programa em C:

#include <stdio.h>

int main()
{
    puts("Hello World");
}
    
por 13.05.2016 / 17:34
2

Se você está pedindo uma maneira de decodificar essa codificação binária, você pode usar

 perl -ape '$_=pack "(B8)*", @F'
    
por 13.05.2016 / 17:38