作者EdisonX (卡卡獸)
站內Programming
標題[問題] 如何開發出編譯器 ?
時間Sat Jul 27 21:07:52 2013
目前工作,有先用 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
1F:→ LPH66:我會比較喜歡設一個副檔名出來設關連 114.26.44.185 07/28 04:23
2F:→ LPH66:畢竟要寫編譯器有很多瑣碎的事要做 114.26.44.185 07/28 04:25
3F:→ LPH66:能夠保持直譯式會是最好的 114.26.44.185 07/28 04:26
4F:→ LPH66:如果設關連有困難的話我可能就會直接使用 114.26.44.185 07/28 04:26
5F:→ LPH66:原來的 execute.exe 了 114.26.44.185 07/28 04:26
6F:→ azureblaze:不然就想辦法從外部把script硬包進exe 118.168.64.7 07/28 09:24
7F:→ azureblaze:autohotkey好像是這種作法 118.168.64.7 07/28 09:24
8F:→ EdisonX:先謝謝 LPH66 , 設關連沒什麼問題. 180.177.77.10 07/28 15:57
9F:→ EdisonX:另請教 az~ , 我知道不少 script language 180.177.77.10 07/28 15:58
10F:→ EdisonX:是如您的做法,autohotkey,autoit 都是, 180.177.77.10 07/28 15:58
11F:→ EdisonX:但還真不知怎下手... 180.177.77.10 07/28 15:59
12F:→ azureblaze:最簡單的方法就程式先宣告一大塊 118.168.64.7 07/28 18:19
13F:→ azureblaze:static data,init成magic string 118.168.64.7 07/28 18:20
14F:→ azureblaze:然後在exe搜尋這個string蓋過去 118.168.64.7 07/28 18:20
15F:→ azureblaze:其他就要研究看看exe的結構了 118.168.64.7 07/28 18:21
16F:→ EdisonX:所以最後會修改到完成的.exe 的 bin.code? 180.177.77.10 07/28 18:22
17F:→ EdisonX:嗯嗯,了解,謝謝您的意見。 180.177.77.10 07/28 18:22
18F:→ azureblaze:winapi有個叫UpdateResource()的東西 118.168.64.7 07/28 18:24
20F:→ EdisonX:太感謝了,這支 API 好鮮,有空摸摸先 :D 180.177.77.10 07/28 18:28
21F:→ proach:我想的根azureblaze想的應該差不多 114.32.221.214 07/29 01:38
22F:→ proach:如果你的程式內有很多string,可以在.exe 114.32.221.214 07/29 01:39
23F:→ proach:內搜尋到這些字串。如果這些字串就是script 114.32.221.214 07/29 01:39
24F:→ proach:應該有機會事後修改.exe內的default script 114.32.221.214 07/29 01:39
25F:→ drm343:想到了用 7zip 裝成 exe 檔的作法XD 118.163.91.90 07/29 10:30
26F:推 suhorng:我覺得應就是az的方法 118.166.61.226 07/31 01:14
27F:→ suhorng:類似這script真正用compiler太不符成本了 118.166.61.226 07/31 01:14
28F:→ suhorng:這類型 118.166.61.226 07/31 01:14
29F:→ suhorng:話說說不定某些壓縮軟體有提供建立自解檔 118.166.61.226 07/31 01:16
30F:→ suhorng:並且自動執行指定程式的功能... 118.166.61.226 07/31 01:16
31F:推 kingstong:BIN.CODE應該是看不到,只會看見亂碼 140.134.60.122 07/31 12:26
32F:→ suhorng:看得到 118.166.61.226 07/31 14:53
33F:推 kingstong:怎麼樣才能看?敬請不吝賜教,非反串 140.134.224.47 07/31 15:41
34F:→ suhorng:例如用HexEdit/UltraEdit/MadEdit編輯器 118.166.61.226 07/31 16:39
35F:推 kingstong:感謝賜教125.224.211.248 07/31 19:18
36F:→ EdisonX:對唷..的確 WinRar 有解壓縮後自動執行的 180.177.77.10 07/31 23:03
37F:→ EdisonX:功能… 180.177.77.10 07/31 23:03
38F:→ henry10423:有聽過反射嘛?Reflection 1.160.223.80 08/04 10:17
39F:→ EdisonX:請問 Reflection 的意思是 ??? 180.177.73.182 08/04 15:52
40F:→ coolcomm:reflection 不是 java 的東西嗎=.= 123.110.199.28 08/04 18:48
42F:→ purpose:是用 UpdateResource(h, RT_RCDATA, 沒錯 124.8.141.48 08/04 21:34
43F:→ purpose:資源名稱固定都用 >AUTOHOTKEY SCRIPT< 124.8.141.48 08/04 21:34
44F:→ EdisonX:這份 code 好屌, 謝謝 purpose :D 180.177.73.182 08/04 23:32