通過這個,我的意思是可以用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