バイナリコードがあり、それを実行したいと思います。
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
8個の0と1からなる11個のシーケンスが次の値を持つバイトであるとします。
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'