2010-05-29 18 views

cevap

52

Eğer yerel bir Windows uygulaması üzerinde çalışıyoruz beri, ne istiyorum:

ayrıntılı olarak bu konuda genişletmek yığın taşması sorular çok var metin dosyasının içeriğini derlenmiş kaynağa gömmek için kullanıcı tanımlı bir kaynak oluşturmaktır.

Kullanıcı tanımlı bir kaynağın biçimi the functions for loading it olduğu gibi documented on MSDN şeklindedir.

Böyle bir kaynak dosyasında metin dosyasını gömmek: nameID kaynağı tanımlayan ve typeID 255 den bazı benzersiz 16-bit işaretsiz tamsayı büyüktür bazı özel 16 bit işaretsiz tam sayıdır

nameID typeID filename 

Bu, kaynak türünü tanımlar (bu tamsayıları resource.h dosyasında tanımlayabilirsiniz). filename, ikili içeriğinin derlenmiş kaynağa gömülmesini istediğiniz dosya yoludur.

Yani bunun gibi olabilir:

resource.h yılında:

// Other defines... 

#define TEXTFILE  256 
#define IDR_MYTEXTFILE 101 

senin kaynak dosyasında:

#include "resource.h" 

// Other resource statements... 

IDR_MYTEXTFILE TEXTFILE "mytextfile.txt" 

Sonra hata denetimi kodu atlanmış (bunu böyle yük netlik için):

Kaynağın, yürütülebilir dosyanın binary'sinde bulunduğu ve kaynağı otomatik olarak sileceği için, kaynağı serbest bırakmak zorunda olmadığınıza dikkat edin (işlev FreeResource(), 32 bit ve 64 bit Windows'ta hiçbir şey yapmaz sistemleri).

Veriler yürütülebilir ikili dosyada bulunduğundan, doğrudan alınan işaretçi aracılığıyla değiştiremezsiniz (bu nedenle LoadFileInResource() işlev uygulaması işaretçiyi bir const char* içinde saklar). Bunu yapmak için BeginUpdateResource(), UpdateResource() ve EndUpdateResource() işlevlerini kullanmanız gerekir.

+0

Bir tane daha merak ettim [burada] (http://stackoverflow.com/questions/35521857/best-practice-to-protect-resources-against-reverse-engineering). Cevabınızla ilgili ikinci soruma cevap verebilir misiniz?Sadece cevabınızda ana olan kodu içerecek bir işlevi olan bir dll dosyasına nasıl sahip olunur. – utvecklare

+0

"Sistem program çıktığında bunları otomatik olarak silecektir" Sistem serbest kaynaklardan çıkarken programların tamamı yok mu? Bir yürütülebilir dosyanın çalışması sırasında bellek sızıntısı ve kaynak sızıntısı oluşur. Yani bu program aynı kaynaktan n yüklerse, bir kaynak sızıntısında yayınlanır. – Raindrop7

+0

Kaynak dosyasının özelliklerinde "Null Terminate Strings" var –

-2

Bir .h/.cc dosyası için veri oluşturmak üzere xxd (bir linux makinesinden veya muhtemelen cygwin'den) kullanabilirsiniz.

+6

-1 PE (+) dosyaları zaten özel kaynakları depolayabilir ve Windows oluşturma araçları ihtiyacınız olan her şeye sahiptir. Kaynak kod sözdizimi belgelendi ve işletim sistemi bu verilere erişmek için API'ler sağlıyor. Bu cevap başka bir sorunun cevabıdır. – IInspectable

İlgili konular