標題有點無厘頭,不過說穿了是個簡單的技巧而已。

首先,我猜有更好的做法,如有網友說可用 LoadResource / LoadResourceString 方式完成。

 

問題敘述

 

(1) Q1 : 一開始我用 C/C++ 產生 exe,這個 exe 像是直譯器,會去讀某個 script file,做相對應的事。但如此一來,要在某台電腦裡執行某些 script 時,就必須要給兩個檔案 (exe 和 script ),有辦法包成一個就好嗎?

(2) Q2 : 程式有接硬體,程式碼裡某項功能有鎖特定之硬體序號等資訊(將近 1KB 資訊),但每次客戶有需求時,就必須要把硬體序號等資訊重新改過,再  rebuild 過。有辦法不重新 rebuild 嗎?

 

Sol

 

關於問題 (1) 其實有個偷機的方式,只是最後我沒那麼做。假設要傳給 client 的是 Script.exe 和 Script.txt,這時可以用一些壓縮軟體做輔助,如 WinRar。把這兩個檔案壓成 .exe ,選項有一個是解壓後自動執行 (這裡就選 Script.exe),再把解壓出來的檔案砍掉。

 

假設專案名是 Script,另一個方式,我在 source code 裡面,直接用 static const char szInstrBuf[2M] = "HelloHelloHello....." ; 

重點是 szInstrBuf 的內容一定要填滿到 2MB 那麼大,這樣編出來的 Script.exe ,用二進位軟體去找,一定找得到這串 ASCII 數值。

這樣就能改變 szInstrBuf 內容。

 

是的,既然可以改變 szInstrBuf 內容,所以可以把所有的 Script 的內容全都寫到 szInstrBuf 裡面去,這樣原本對檔案做處理的動作,

就變成轉向對 szInstrBuf 做處理。

 

換句話說,這時需要再寫一個輔助小工具,將 Script.txt 的內容,寫到 Script.exe 裡面szInstrBuf 位置,壞處是 Script.txt 經過處理後的長度不能超過 2MB,只能寫些小的 Script ( 這個小工具就真的是變成假編譯器了?)

 

照這方式跑,其實 Q2 的流程也一樣,這裡就不多說了。

 

 

 

創作者介紹
創作者 edisonx 的頭像
edisonx

Edison.X. Blog

edisonx 發表在 痞客邦 留言(2) 人氣()