作者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