[問題] 如何開發出編譯器 ?

看板Programming作者 (卡卡獸)時間10年前 (2013/07/27 21:08), 編輯推噓5(5039)
留言44則, 10人參與, 最新討論串1/2 (看更多)
目前工作,有先用 C/C++ ,編譯出一個 Execute.exe 後, 以讀檔方式,去做一些相對應的動作, 整體而言,Execute.exe 就像是直譯器,舉個例子好了 --------- # filename : sample.s # author : xxxx MsgBox ( Hello ) ; % command here LButtonDown(10,20); LButtonUp(10,20) ; -------- 原本 Execute.exe 是被我定位成輔助工具,要執行該 script 時用 Execute.exe sample.s 後來 team 覺得弄得不錯,有意想要商業化 , ( 有沒有商業化的價值先跳過,這不在討論的重點裡 ) 小弟構思第一步,是將 execute.exe 變成編譯器, (前半段的語法分析... etc 那些就先全跳過了, 初估最後一步是最大瓶頸) 下 execute.exe sample.s 時,會將 sample.s 的動作包成 sample.exe, 這樣以後 release 就不必再有 execute.exe 存在。 但左思右想真不知道該怎麼下手, google 關鍵字下 "編譯器" "compiler" 也找不到我想要的東西, 懇請各位先進能給個起頭、資源、關鍵字, 小弟感激不盡。 -- 就算把新鮮的肝拿回去,還是一樣寫碼到禿頭,加班到天亮, 永遠當老闆的傀儡 你是不是想這麼做? 是的話你就拿回去~ 拿啊!! 九世宅男 : 下輩子不要再讓我幹工程師了 ~ < Kuso 星爺語錄 > -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.77.10 EdisonX:轉錄至看板 ASM 07/27 21:10

07/28 04:23, , 1F
我會比較喜歡設一個副檔名出來設關連
07/28 04:23, 1F

07/28 04:25, , 2F
畢竟要寫編譯器有很多瑣碎的事要做
07/28 04:25, 2F

07/28 04:26, , 3F
能夠保持直譯式會是最好的
07/28 04:26, 3F

07/28 04:26, , 4F
如果設關連有困難的話我可能就會直接使用
07/28 04:26, 4F

07/28 04:26, , 5F
原來的 execute.exe 了
07/28 04:26, 5F

07/28 09:24, , 6F
不然就想辦法從外部把script硬包進exe
07/28 09:24, 6F

07/28 09:24, , 7F
autohotkey好像是這種作法
07/28 09:24, 7F

07/28 15:57, , 8F
先謝謝 LPH66 , 設關連沒什麼問題.
07/28 15:57, 8F

07/28 15:58, , 9F
另請教 az~ , 我知道不少 script language
07/28 15:58, 9F

07/28 15:58, , 10F
是如您的做法,autohotkey,autoit 都是,
07/28 15:58, 10F

07/28 15:59, , 11F
但還真不知怎下手...
07/28 15:59, 11F

07/28 18:19, , 12F
最簡單的方法就程式先宣告一大塊
07/28 18:19, 12F

07/28 18:20, , 13F
static data,init成magic string
07/28 18:20, 13F

07/28 18:20, , 14F
然後在exe搜尋這個string蓋過去
07/28 18:20, 14F

07/28 18:21, , 15F
其他就要研究看看exe的結構了
07/28 18:21, 15F

07/28 18:22, , 16F
所以最後會修改到完成的.exe 的 bin.code?
07/28 18:22, 16F

07/28 18:22, , 17F
嗯嗯,了解,謝謝您的意見。
07/28 18:22, 17F

07/28 18:24, , 18F
winapi有個叫UpdateResource()的東西
07/28 18:24, 18F

07/28 18:25, , 19F
http://ppt.cc/eliu 或許可以試試看
07/28 18:25, 19F

07/28 18:28, , 20F
太感謝了,這支 API 好鮮,有空摸摸先 :D
07/28 18:28, 20F

07/29 01:38, , 21F
我想的根azureblaze想的應該差不多
07/29 01:38, 21F

07/29 01:39, , 22F
如果你的程式內有很多string,可以在.exe
07/29 01:39, 22F

07/29 01:39, , 23F
內搜尋到這些字串。如果這些字串就是script
07/29 01:39, 23F

07/29 01:39, , 24F
應該有機會事後修改.exe內的default script
07/29 01:39, 24F

07/29 10:30, , 25F
想到了用 7zip 裝成 exe 檔的作法XD
07/29 10:30, 25F

07/31 01:14, , 26F
我覺得應就是az的方法
07/31 01:14, 26F

07/31 01:14, , 27F
類似這script真正用compiler太不符成本了
07/31 01:14, 27F

07/31 01:14, , 28F
這類型
07/31 01:14, 28F

07/31 01:16, , 29F
話說說不定某些壓縮軟體有提供建立自解檔
07/31 01:16, 29F

07/31 01:16, , 30F
並且自動執行指定程式的功能...
07/31 01:16, 30F

07/31 12:26, , 31F
BIN.CODE應該是看不到,只會看見亂碼
07/31 12:26, 31F

07/31 14:53, , 32F
看得到
07/31 14:53, 32F

07/31 15:41, , 33F
怎麼樣才能看?敬請不吝賜教,非反串
07/31 15:41, 33F

07/31 16:39, , 34F
例如用HexEdit/UltraEdit/MadEdit編輯器
07/31 16:39, 34F

07/31 19:18, , 35F
感謝賜教
07/31 19:18, 35F

07/31 23:03, , 36F
對唷..的確 WinRar 有解壓縮後自動執行的
07/31 23:03, 36F

07/31 23:03, , 37F
功能…
07/31 23:03, 37F

08/04 10:17, , 38F
有聽過反射嘛?Reflection
08/04 10:17, 38F

08/04 15:52, , 39F
請問 Reflection 的意思是 ???
08/04 15:52, 39F

08/04 18:48, , 40F
reflection 不是 java 的東西嗎=.=
08/04 18:48, 40F

08/04 21:32, , 41F
http://goo.gl/ve94Km Ahk2Exe 原始碼
08/04 21:32, 41F

08/04 21:34, , 42F
是用 UpdateResource(h, RT_RCDATA, 沒錯
08/04 21:34, 42F

08/04 21:34, , 43F
資源名稱固定都用 >AUTOHOTKEY SCRIPT<
08/04 21:34, 43F

08/04 23:32, , 44F
這份 code 好屌, 謝謝 purpose :D
08/04 23:32, 44F
文章代碼(AID): #1HyyOrG6 (Programming)
文章代碼(AID): #1HyyOrG6 (Programming)