İkili Dosyalar Hakkında Bilmeniz Gerekenler: Nasıl Açılır ve Kullanılır

İçindekiler

Binary file

İkili dosya nedir?

İkili dosya, metin dosyasından farklı bir bilgisayar dosyasıdır. Bir bilgisayar programı gibi veriler içerebilir ya da bir programın kullanması için verileri depolayan bir dosya olabilir. Genel olarak, assembler diliyle derlenmiş bir makine kodudur.

ikili dosya nasıl açılır?

Bir ikili dosyayı açmanın birkaç farklı yolu vardır. En yaygın yöntem, İkili Dosya Düzenleyici: C++ veya Windows API işlevini kullanmaktır.

1. bin dosyası düzenleyicisi: C++ programı

C++ ile bir ikili dosyayı açmak için, standart C++ kütüphanesinin bir parçası olan ifstream sınıfını kullanmanız gerekir. Bu yöntemi kullanmak için önce fstream başlık dosyasını dahil etmeniz gerekir. Ardından, ifstream::open() üye işlevini kullanarak dosyanın adını veya yolunu parametre olarak geçirerek ikili dosyayı açabilirsiniz. Örneğin:

1.1 .bin dosyasını aç

				
					/// C++ open bin file
void getBinSize(std::string path)
{
int size = 0;
std::ifstream infile(path, std::ifstream::binary);

infile.seekg(0, infile.end);
int size= infile.tellg();
infile.seekg(0, infile.beg);

infile.close();
printf("\npath=%s,size=%d \n", path, size);
return size;
}

void readBin(std::string path, char *buf, int size)
{
std::ifstream infile(path, std::ifstream::binary);

infile.read(static_cast<char *>(buf), size);
infile.close();
}
				
			

1.2 Bin Dosyasını Kaydetme

				
					/// C++ save bin file
void writeBin ( std::string path , char * buf , int size )
{ std::ofstream outfile ( path , std::ifstream::binary );

outfile.write((char *)(buf), size);

outfile.close();
}
				
			

1.3 Bin Dosyasını Okuma

				
					// read binFile
std::string filePath= "./demo.bin";
int size = GetBinSize(filePath);
char *buf= new char[size];
readBin(filePath, buf, size);
float *fbuf = reinterpret_cast<float *>(buf);

// write binFile
std::string saveFilePath= "./demo_saved.bin";
writeBin(saveFilePath, buf, size);

delete buf;
				
			

2. Windows API işlevi CreateFile()

İkili bir dosyayı açmanın bir başka yolu da Windows API işlevi olan CreateFile()'ı kullanmaktır. Bu işlev, C++ standart kütüphanesinin bir parçası olmayan Windows API'sinin bir parçasıdır. Ancak, Windows.h başlık dosyasını dahil ederek bunu C++ programlarınızda kullanabilirsiniz. CreateFile() işlevi çeşitli parametreler alır, ancak bir ikili dosyayı açmak için en önemlileri dosya adı veya yolu, istenen erişim (örneğin, okuma için GENERIC_READ veya yazma için GENERIC_WRITE) ve paylaşım modudur (örneğin, işleminiz dosyayı açık tutarken diğer işlemlerin dosyayı okumasına izin vermek için FILE_SHARE_READ). Örneğin:

				
					#include Windows.h>

int main()
{
HANDLE file = CreateFile("example.bin", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
// ...
}
				
			

İkili Dosya Hatası: "İkili dosya çalıştırılamıyor, exec biçim hatası"

"İkili dosya çalıştırılamıyor: Yürütme biçimi hatası" hatası genellikle, sisteminizin mimarisiyle uyumlu olmayan bir ikili dosyayı çalıştırmaya çalıştığınızda ortaya çıkar. İşte bu tür bir sorunun nasıl çözüleceğini gösteren bir örnek.

Aşağıda, çapraz derleyiciyle derlediğim program kodu yer almaktadır:

				
					#include <stdio.h>
void main()
{
   printf("hello arm");
}
				
			

Bilgisayarda derleme:

				
					# arm-linux-gnueabi-gcc -o main main.c
				
			

Bilgisayarda çalıştırırken görülen hata mesajı:

				
					root@ubuntu:/home/jinxin/app# ./main
bash: ./main: cannot execute binary file: Exec format error
				
			

Mevcut bilgisayar x86 mimarisine sahip ve az önce derlenen ikili dosya ARM formatında:

				
					root@ubuntu:/home/jinxin/app# file main
root@ubuntu:/home/jinxin/app# file main
main: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ec9b455a1c1df94060c7364d0efc42975207fca9, not stripped
				
			

EXEC Biçim Hatası Çözümü

Bu sorunu çözmek için birkaç seçeneğimiz var:

İkili dosyayı ARM tabanlı bir cihazda çalıştırın: ARM tabanlı bir cihaza erişiminiz varsa, ikili dosyayı o cihaza kopyalayıp orada çalıştırabilirsiniz.

Kodu x86 mimarisi için çapraz derleyin: Bir x86 çapraz derleyici kullanarak kodu x86 mimarisi için derleyebilirsiniz. Bunu yapmak için, PC'nize bir x86 çapraz derleyici yüklemeniz ve kodu bununla derlemeniz gerekir.

Bir emülatör kullanın: QEMU gibi bir emülatör kullanarak x86 tabanlı PC'nizde ARM tabanlı bir cihazı taklit edebilir ve ikili dosyayı emülatörde çalıştırabilirsiniz.

Sanal makine kullanın: Sanal makine kullanarak x86 tabanlı bilgisayarınızda ARM tabanlı bir cihazı taklit edebilir ve ikili dosyayı sanal makinede çalıştırabilirsiniz.

Genel olarak, en iyi çözüm, özel kullanım durumunuza ve mevcut kaynaklarınıza bağlıdır.

Abone ol

Aylık blog güncellemeleri, teknoloji haberleri ve vaka analizleri almak için abone listemize katılın. Asla spam göndermeyeceğiz ve istediğiniz zaman aboneliğinizi iptal edebilirsiniz.

Yazar Hakkında

Picture of Aidan Taylor
Aidan Taylor

I am Aidan Taylor and I have over 10 years of experience in the field of PCB Reverse Engineering, PCB design and IC Unlock.

Yardıma mı ihtiyacınız var?

Scroll to Top

Instant Quote