我的意思是,有可能用C编写程序,编译它然后看看它在零和零中的样子吗?像1337黑客一样行事并假装实际用零和零编程会很酷:p。
答案 0 :(得分:13)
您可以使用xxd:
xxd -b filename
C:\opt\bin> xxd -b ctags.exe | head 0000000: 01001101 01011010 10010000 00000000 00000011 00000000 MZ.... 0000006: 00000000 00000000 00000100 00000000 00000000 00000000 ...... 000000c: 11111111 11111111 00000000 00000000 10111000 00000000 ...... 0000012: 00000000 00000000 00000000 00000000 00000000 00000000 ...... 0000018: 01000000 00000000 00000000 00000000 00000000 00000000 @..... 000001e: 00000000 00000000 00000000 00000000 00000000 00000000 ...... 0000024: 00000000 00000000 00000000 00000000 00000000 00000000 ...... 000002a: 00000000 00000000 00000000 00000000 00000000 00000000 ...... 0000030: 00000000 00000000 00000000 00000000 00000000 00000000 ...... 0000036: 00000000 00000000 00000000 00000000 00000000 00000000 ......
只是为了让这个与编程更相关:
#include <stdio.h>
#include <stdlib.h>
const char *lookup[] = {
/* 0 1 2 3 4 5 6 7 */
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
/* 8 9 A B C D E F */
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111",
};
int main(int argc, char *argv[]) {
FILE *fin;
int c;
size_t bytes_read = 0;
if ( argc != 2 ) {
fputs("No filename provided", stderr);
exit(EXIT_FAILURE);
}
fin = fopen(argv[1], "rb");
if ( !fin ) {
fprintf(stderr, "Cannot open %s\n", argv[1]);
exit(EXIT_FAILURE);
}
while ( EOF != (c = fgetc(fin)) ) {
printf("%s", lookup[ (c & 0xf0) >> 4 ]);
printf("%s", lookup[ (c & 0x0f) ]);
bytes_read += 1;
if ( bytes_read % 9 == 0 ) {
puts("");
}
}
fclose(fin);
return EXIT_SUCCESS;
}
输出:
C:\Temp> binary.exe c:\opt\bin\ctags.exe | head 010011010101101010010000000000000000001100000000000000000000000000000100 000000000000000000000000111111111111111100000000000000001011100000000000 000000000000000000000000000000000000000000000000010000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000111000000000000000000000 000000000000111000011111101110100000111000000000101101000000100111001101 001000011011100000000001010011001100110100100001010101000110100001101001 011100110010000001110000011100100110111101100111011100100110000101101101
答案 1 :(得分:4)
使用hexdump或hex editor以十六进制字节查看二进制文件。
十六进制只是查看二进制文件的一种更紧凑的方式。每个十六进制数字(0-F)代表四位。例如,十进制中的0xF
为15,二进制中为{11}。
答案 2 :(得分:1)
你是说你不能进行编译并将操作码翻译成二进制文件?
实际上,我学习编程的其中一台计算机必须通过前面板开关切换自举代码。您需要输入足够的代码才能让它从8“软盘驱动器启动加载程序并加载操作系统。您可以看到一张here的图片。我确实需要知道启动加载程序的二进制文件操作码。
答案 3 :(得分:0)
当然有可能。您可以使用this post中的信息编写自己的查看器。