通过这个,我的意思是可以用C编写一个程序,编译它,然后看看它在一个和零中看起来像什么?像1337黑客那样行事并假装实际编程为1和0将是很酷的:p。是否可以查看一个和零个二进制文件?
回答
您可以使用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
使用hexdump或hex editor查看十六进制字节的二进制。
十六进制只是一种更简洁的查看二进制文件的方式。每个十六进制数字(0-F)代表四位。例如,0xF
十进制为15,二进制是1111
如果你碰巧在Linux下运行KDE,KHexEdit是一个很好的十六进制编辑器。 – 2009-08-28 02:45:12
当然有可能。您可以使用this post中的信息编写自己的查看器。
你的意思是你不能编译并将操作码翻译成二进制文件?
实际上,我学会编程的计算机之一必须通过前面板开关切换引导程序代码。你需要输入足够的代码才能从8“软盘驱动器启动加载程序并加载操作系统,你可以看到一个here的图片,我确实需要知道启动加载器操作码的二进制文件
+1使用了8英寸软盘。让我想起了几天来,我在一个巨型机柜中用了一台水冷IBM系统,内存高达64K。 – 2009-08-28 03:14:11
出于好奇,最终存在多少代码?几个操作码,几十个,几百个? – 2009-08-28 03:16:17
@布鲁克斯 - 我希望我能记住。我认为这可能不是很多。我非常肯定,我可以在我的整个程序中切换并跳过软盘。调试是通过遍历内存空间并查看指示1/0s的红灯来检查值来完成的。当我将操作系统复制到我自己的软盘上时,得到了我的第一个反盗版讲座,所以我可以将操作系统和我的程序合二为一而不必切换。 **这给人留下了深刻的印象。我们只是说,许可部门和我现在相处得很好。 – tvanfosson 2009-08-28 10:53:07
- 1. 如何看到一个文件是否为cvs中的二进制文件
- 2. 是否可以在某个二进制代码片段中使用vtune而不是整个二进制文件?
- 3. StreamReader和StreamWriter可以读写一个二进制文件吗?
- 4. 可可或Bash:测试一个文件是否是一个可执行的二进制文件
- 5. 如何编写一个二进制数字填充零的二进制文件?
- 6. 是否可以用二进制编程?
- 7. 是否可以制作一个.xcodeproj文件和如何?
- 8. 是否可以重新定位二进制文件?
- 9. 是否可以在java中执行二进制文件?
- 10. 如何检查文件是否是二进制文件?
- 11. 在Python中获取零和一个二进制数的个数
- 12. 我可以在二进制mod中查看一个linux目录吗?
- 13. 写多个值,以二进制文件
- 14. 是否有一个函数可以否定C中的二进制数?
- 15. 如何检查lldb是否可以附加到二进制文件?
- 16. PIL-可以给PIL一个二进制对象而不是文件句柄?
- 17. 是否有一个MSBuild和TFSBuild变量指向二进制文件的位置?
- 18. 检查文件数据是否为二进制文件
- 19. 如何从一个二进制文件
- 20. 如何从一个二进制文件
- 21. 创建一个二进制文件
- 22. 是否可以在intellij-idea的新窗口中查看一个文件?
- 23. 如何以二进制格式“查看”音频文件?
- 24. 是否可以编辑和重新编译iOS二进制文件?
- 25. 制作一个尽可能少的二进制文件
- 26. 是否有一些地方可以下载AIX mod_jk二进制文件?
- 27. Rails:可能检查一个字符串是二进制的吗?
- 28. 是否可以在十六进制查看器中查看IPTC数据?
- 29. 是否可以查看文档?
- 30. 如何搜索一个子串是否在Python中进入二进制文件?
是啊....只是用hexeditor打开你编译的程序...人们实际上是这样做的反向工程的东西*。 – mpen 2009-08-28 02:40:04
可悲的是,我实际上不得不盯着十六进制内存转储来调试某些种类的崩溃在我的工作中,我的同事们称之为“阅读矩阵”,而我认为它是“阿司匹林的时间”。 – Crashworks 2009-08-28 03:20:36