Dari apa yang saya mengerti, kompiler membuat file biner yang terdiri dari 1 dan 0 yang dapat dibaca CPU. Saya memiliki file biner tetapi bagaimana cara membukanya untuk melihat angka 1 dan 0 yang ada di sana? Editor teks mengatakan tidak dapat membukanya ...
PS Saya punya majelis yang dikompilasi biner yang seharusnya menjadi kode biner sederhana 1 dan 0?
Jawaban:
Menurut jawaban ini oleh tyranid :
Memperbarui
Menurut jawaban ini oleh Emilio Bool :
sumber
Berbagai orang telah menjawab beberapa aspek permintaan, tetapi tidak semua.
Semua file di komputer disimpan sebagai file 1 dan 0. Gambar, file teks, musik, aplikasi yang dapat dieksekusi, file objek, dll.
Semuanya 0 dan 1. Satu-satunya perbedaan adalah bahwa mereka ditafsirkan berbeda tergantung pada apa yang membukanya.
Ketika Anda melihat file teks menggunakan
cat
, executable (cat
dalam hal ini) membaca semua 1 dan 0 dan menyajikannya kepada Anda dengan mengubahnya menjadi karakter dari alfabet atau bahasa yang relevan.Ketika Anda melihat file menggunakan penampil gambar, dibutuhkan semua 1 dan 0 dan mengubahnya menjadi gambar, tergantung pada format file dan beberapa logika untuk menyelesaikannya.
File biner yang dikompilasi tidak berbeda, mereka disimpan sebagai file 1 dan 0.
Jawaban arzyfex memberi Anda alat untuk melihat file-file dengan cara yang berbeda, tetapi membaca file sebagai biner berfungsi untuk file apa pun di komputer, seperti halnya melihatnya sebagai oktal, atau hex, atau memang ASCII, mungkin saja tidak masuk akal di setiap format tersebut.
Jika Anda ingin memahami apa yang dilakukan file biner yang dapat dieksekusi, Anda perlu melihatnya dengan cara yang menunjukkan kepada Anda bahasa assembler (sebagai permulaan), yang dapat Anda lakukan menggunakan,
objdump -d /path/to/binary
yang merupakan disassembler, mengambil konten biner dan mengubahnya kembali menjadi assembler (yang merupakan bahasa pemrograman tingkat sangat rendah).
objdump
tidak selalu diinstal secara default, jadi mungkin perlu diinstal tergantung pada lingkungan Linux Anda.Beberapa bacaan eksternal.
NB: seperti yang ditunjukkan @Wildcard, penting untuk dicatat bahwa file tidak mengandung karakter 1 dan 0 (seperti yang Anda lihat di layar), itu berisi data numerik aktual, bit informasi individual yang dihidupkan (1) atau mati (0). Bahkan deskripsi itu hanyalah perkiraan kebenaran. Poin utama mereka adalah bahwa jika Anda menemukan penampil yang menunjukkan Anda 1 dan 0, bahkan itu masih menafsirkan data dari file dan kemudian menunjukkan kepada Anda karakter ASCII untuk 0 dan 1. Data disimpan dalam format biner ( lihat tautan Nomor biner di atas). Entri wiki komunitas Pierre-Olivier membahas hal ini lebih terinci.
sumber
cat
, executable (cat
dalam hal ini) membaca semua angka 1 dan 0 dan menyajikannya kepada Anda dengan mengonversinya menjadi karakter dari alfabet Anda yang relevan atau bahasa."cat
tidak melakukan itu; semuacat
lakukan adalah menulis byte ke output standar (kecuali jika Anda menggunakan opsi "berbahaya" ). Program terminal (dan / atau perangkat keras terminal, jika berlaku, yaitu firmware-nya) menentukan cara merender byte sebagai karakter, mungkin dengan bantuan dari driver TTY.Pada level rendah, file dikodekan sebagai urutan 0 dan 1.
Tetapi bahkan programmer jarang pergi ke sana dalam praktek.
Pertama (dan lebih penting daripada cerita 0 dan 1 ini), Anda harus memahami bahwa apa pun yang dimanipulasi komputer dikodekan dengan angka .
Karakter dikodekan dengan angka, menggunakan tabel set karakter. Misalnya, huruf 'A' memiliki nilai 65 ketika dikodekan menggunakan ASCII. Lihat http://www.asciitable.com
Piksel dikodekan dengan satu angka atau lebih (Ada banyak format grafis) Misalnya, dalam format 3-warna standar, piksel kuning dikodekan sebagai: 255 untuk Merah, 255 untuk Hijau, 0 untuk Biru. Lihat http://www.quackit.com/css/css_color_codes.cfm (pilih warna dan lihat sel R, G & B)
File biner-executable ditulis dalam Assembly; setiap instruksi perakitan dikodekan sebagai angka. Misalnya, instruksi perakitan
MOVB $0x61,%al
dikodekan oleh dua angka: 176,97 Lihat http://www.sparksandflames.com/files/x86InstructionChart.html (Setiap instruksi memiliki angka yang terkait dari 00 hingga FF, karena notasi heksadesimal digunakan, Lihat di bawah)Kedua : setiap angka dapat memiliki banyak representasi atau notasi .
Katakanlah saya punya 23 apel.
Tapi saya juga bisa membuat kelompok 16 apel. Jadi saya akan mendapatkan satu Group-of-16, dan 7 apel sendirian. Dalam notasi heksadesimal (begitulah yang disebut 16 radix), saya akan menulis: 17 (16 + 7). Untuk membedakan dari notasi desimal, notasi heksadesimal biasanya dicatat dengan awalan atau akhiran: 17h, # 17 atau $ 17. Tetapi bagaimana cara mewakili lebih dari 9 Kelompok-16, atau lebih dari 9 apel saja? Sederhananya, kami menggunakan huruf dari A (10) hingga F (15). Angka 31 (seperti pada 31 apel) ditulis sebagai # 1F dalam heksadesimal.
Pada baris yang sama, kita dapat melakukan kelompok dua apel. (Dan kelompok dua kelompok apel dua, yaitu kelompok apel 2x2, dan seterusnya). Kemudian 23 adalah: 1 kelompok apel 2x2x2x2, 0 kelompok apel 2x2x2, apel 1 kelompok 2x2, apel 1 kelompok 2, dan 1 apel saja yang akan dicatat 10111 dalam biner.
(Lihat https://en.wikipedia.org/wiki/Radix )
Secara fisik, mekanisme yang memungkinkan dua keadaan (sakelar) mudah dilakukan, juga pada disk yang ada di penyimpanan memori.
Itu sebabnya data dan program, dilihat sebagai angka, ditulis dan dimanipulasi dalam bentuk binernya.
Kemudian diterjemahkan - tergantung pada tipe data - ke dalam bentuk yang sesuai (huruf A, piksel kuning) atau dieksekusi (instruksi MOV).
hexdump
daftar angka-angka yang mengkode data (atau program perakitan) dalam bentuk heksadesimal itu. Anda kemudian dapat menggunakan kalkulator untuk mendapatkan formulir biner yang sesuai.sumber
Saya akan mulai dengan
od
(octal dump) , dan tergantung pada sistemnya, mungkin menemukan alat sepertiobjdump
berguna.sumber
Anda bisa membukanya di hex editor yang menunjukkannya sebagai serangkaian nilai heksadesimal.
xxd file
Apa yang ingin Anda capai?
sumber
bvi
adalah editor Binary VIsual dengan vim keybindings. Ini tersedia di sebagian besar sistem linux.sumber
Perintah Linux strings mencetak string karakter yang dapat dicetak dalam file, misalnya:
dll ... itu lebih mudah dibaca daripada biner.
sumber
strings
perintah itu akan menghapus sebagian besar byte yang ingin dilihatnya.strings
perintah - terutama dengan panjang yang lebih panjang sepertistrings -n 6
- benar-benar membantu mencari tahu apa file biner di dalamnya jika berisi konstanta string, dll. Jawaban ini seharusnya komentar, maka itu akan menjadi komentar, maka itu akan sudah baik-baik saja.strings
kegunaan perintah, hanya saja fakta itu tidak menjawab pertanyaan OP di sini.Bagian penting yang membuat Anda masih bingung: Nilai heksadesimal hanyalah representasi berbeda dari nilai biner. Sebagian besar hex editor atau hexdumps akan menampilkan nilai dalam basis heksadesimal, karena itu lebih mudah dibaca daripada di basis biner.
Misalnya:
Biner:
Yaitu 35 dan 32 dalam desimal
Juga 35 dan 32 dalam desimal
sumber
vim
diinstal untuk menggunakanxxd
.Anda dapat melihat file dalam biner di
vim
, dengan:vim
:% !xxd -b
The
xxd
perintah dapat men-tweak lebih lanjut, misalnya:-g4
, yang akan mengelompokkan bit dalam paket 32-bit-c4
, yang akan memformat output, memiliki 4 byte per barisMenambahkan kedua flag di atas, akan memberi Anda satu bilangan bulat 32-bit per baris.
sumber
Anda dapat melakukannya dengan mis., Ruby one-liner ini:
Sistem berbasis C tradisional memiliki dukungan buruk untuk menghasilkan barang dalam biner, AFAIK. Ini biasanya tidak terlalu berguna karena cukup sulit dibaca tidak seperti dump heksadesimal.
sumber
%08b
menyebabkannya mengelompokkan output menjadi byte.GHex adalah teman
Anda :) Anda dapat menginstalnya menggunakan baris perintah
Ubuntu:
Fedora:
sumber