通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 网络编程 >> 文章正文
如何配置RadASM来支持你的编译器
责任编辑:酷酷の鱼   更新日期:2008-2-13
 

 

[Code]
ParseDll=CppParse.dll
Skip=
Code=
Const=
Data=
Macro=
Struct=
Label=

//这个段功能是用于查找并获取代码属性的。对汇编语言支持比较好。举个masm里的例子:Code=? endp,$Content$nbsp;proc意思是指识别为代码时检测任意名称命名的 proc,结束为 endp。例如:
test proc
...
endp
在masm工程中就会把此部分识别为代码。

[CodeBlock]
1={,},,,0
2=
3=
4=
5=
6=
7=
8=
9=
10=
11=
12=
13=
14=
15=

//代码块,用于标记可折叠的代码块。如1={,},,,0是指开始为“{”结束为“}”的就标记为代码块,将会自动在第一个开始的 { 那放一个可折叠的标记。后面各个逗号中选项大家可以参考帮助文件。最后的那个0是标志位。

[Api]
Trig=
Call=Masm\masmApiCall.api
Const=Masm\masmApiConst.api
Struct=Masm\masmApiStruct.api
Word=Cpp\cppWord.api
Message=Masm\masmMessage.api
Type=Cpp\cppType.api
inc=#include,","
lib=

//这是代码书写助手(Code write helpers)的功能。在你写代码时自动列出函数及在工具栏上显示函数。根据情况定义各个文件。

[Edit]
CodeFiles=.c.cpp.h.rc.tpl.rad.def.api.nsi.dsm.

//这个段是配置编辑环境的,可在RadASM的选项中直接配置,我不全列出来了。基本上可以找个配置好的编译器文件照抄。主要注意上面的这条,这是你的编译器要使用的文件。

[Dialog]
...

//这是对话框编辑器中的选项,可以在选项中设置。照抄别的。

[Error]
BookMark=3
nAsm=99
Identify=Error
Skip=2

//根据作者给我的最新的2.2.0.6版本中的解释,各个关键词的含义如下:

BookMark=3

//这句对应2.2.0.6版本中代码编辑器选项中新增加的编译器错误处理部分的内容。可在选项中设置。

nAsm=99

//这句是指定编译器的。仅当不在 [Code] 段中具体设置编译器时才需考虑。各个含义如下:

MASM=1
TASM=2
FASM=3
GOASM=4
NASM=5
HLA=6
CPP=7
BCET=8
其他编译器=99

如果我们要配置新的非以上类型的编译器的话,就应设成象上面一样:nAsm=99

Identify=Error

//这句是指错误的关键字是什么。

Skip=2

//这句是指在输出窗口中发现了在 Identify 中指定的关键字内容后,在文件名前跳过的单词个数。如象下面这样的错误:
Error E2378 test.cpp 26: Return statement missing ; ……
就会跳过前面的 Error 和 E2378 这两个词后定位到文件名上。这样 RadASM 就能正确跳到出错行了。

[Paths]
$A=C:\Lcc
$B=$A\Bin
$D=$R\AddIns
$H=masm32\Help
$I=$A\Include
$L=$A\Lib
$P=$R\Lcc\Projects
$S=$R\Lcc\Sniplets
$T=$R\Lcc\Templates
$M=$R\Lcc\Macro
$E=C:\Ollydbg

//这个段是路径设置,各个标志与设置路径选项中对应为:$A->App:,编译器的安装路径;$B->Bin:,编译、连接、资源编译等程序的路径。其它的我就不讲了,比较简单。只是注意$R是指RadASM的安装路径。如你的RadASM安装在E:\RadASM,$R就指这个目录。这些标志可在下面的工程配置中使用。

[MakeFiles]
0=.rap
1=.rc
2=.cpp
3=.obj
4=.res
5=.exe
6=.def
7=.dll
8=.txt
9=.lib
10=.mak
11=.c
12=.com
13=.ocx
14=.idl
15=.tlb

//这个段是用于在创建工程时每个工程中所包含的文件类型。记住上面各个序号对应的文件类型,后面要用到。

[Project]
Type=Win32 App,Console App,Dll Project,Ocx Project,LIB Project,Win32 App (no res),Dll Project (no res),Ocx Project (no res)
Files=cpp,h,Rc,Def,Txt,Mak,dsm,idl
Folders=Bak,Mod,Res
MenuMake=编译资源脚本,编译,连接,构建,构建并运行,运行,在调试器中运行,全部构建并运行,编译模块
Group=1
GroupExpand=1

//终于接近最关键的部分了。这个段是设置你的编译器所支持的编译程序类型等。在Type后面定义的是工程类型,名字将作为下面每个具体工程配置段的关键字。Files后面是指工程中所用到的文件类型,用扩展名表示。Folders后面是指出建立工程时在新建的工程目录下有哪些子目录可用。Bak目录用于备份你的每次修改;Mod目录我不太清楚,大概是用于模块(module)的目录,基本没选过这个目录。Res目录是用来保存你的资源文件的。MenuMake后面是指在RadASM构建菜单下的子菜单中显示的项目。后面的Group和GroupExpand是用来定义工程组的,照抄就行了。

[MakeDefNoProject]
MenuMake=1,1,1,1,1,1,1,0,0
1=rsrc.res,O,$D\RC.EXE /v,rsrc.rc
2=$.obj,O,$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I",$.cpp
3=$.exe,O,$B\LCCLNK.EXE /s /SUBSYSTEM WINDOWS,$.obj,$.res
4=0,0,,$.exe
5=rsrc.obj,O,$D\CVTRES.EXE,rsrc.res
6=*.obj,O,$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I",*.cpp
7=0,0,"$E\OllyDbg",$.exe
11=rsrc.res,O,$D\RC.EXE /v,rsrc.rc
12=$.obj,O,$B\LCC.EXE /g2 /O /unused /c /errout=error.txt /I"$I",$.cpp
13=$.exe,O,$B\LCCLNK.EXE /SUBSYSTEM WINDOWS,$.obj,$.res
14=0,0,,$.exe
15=rsrc.obj,O,$D\CVTRES.EXE,rsrc.res
16=*.obj,O,$B\LCC.EXE /g2 /O /unused /c /errout=error.txt /I"$I",*.cpp
17=0,0,"$E\OllyDbg",$.exe

//这里是默认设置,就是你不在RadASM中建立工程,只用RadASM打开源文件执行编译时的配置。这里和下面一段可说是最重要的部分了,请注意看,我一条条的讲解,尽量说的清楚点。先说一下可能用到的几个特殊字符的含义:
$:从RadASM编辑器的最顶部标题栏中获取的不带扩展名的文件名。如打开test工程下的名为test.cpp的文件,这里的$就相当于test,就等于你不带扩展名的文件名称。下面会详细说明。 
|:这个符号将在实际编译工程时替换为“,”(逗号)。如$D\RC.EXE /v,rsrc.rc|test.rc 实际编译时就会是这样(假定RadASM装在E盘根目录下):E:\RadASM\Addins\RC.EXE /v rsrc.rc,test.rc
*:这个符号在编译模块(moudle)时使用。
MenuMake=1,1,1,1,1,1,1,0,0,0 这一条的意思是在构建菜单上可用的子菜单项目。我们来看一下上面的Project段中的MenuMake:
MenuMake=编译资源脚本,编译,连接,构建,构建并运行,运行,在调试器中运行,全部构建并运行,编译模块
我们数一下,每个逗号分隔的算一个项目,共有9个。再看MenuMake=1,1,1,1,1,1,1,0,0,0 共有9个。这里个数无所谓,1是指对应的子菜单激活,0是不激活。这样MenuMake=1,1,1,1,1,1,1,0,0,0 等同于
MenuMake=编译资源脚本,编译,连接,构建,构建并运行,运行,在调试器中运行 共7个子菜单激活。
MenuMake=1,1,1,1,1,1,1,0,0 下面的1到17是编译选项,其中1到7是编译为Release(发行版)时的设置,11到17是指编译为Debug(调试版)时的设置。这里只说1到7的含义,11到17与1到7的类似。首先说一下各个序号的含义:1是指资源编译选项;2是指编译选项;3是指连接选项;4是指运行编译好的程序;5是用于CVTRES的,转换res文件到obj文件;6是编译模块选项;7是指在调试器中运行。1到7的含义如下:

1=rsrc.res,O,$D\RC.EXE /v,rsrc.rc

//这条用于编译资源,用逗号分隔每个项。rsrc.res 是指在执行编译前如果有这个文件就先删掉。O(注意这里不是0,是大写的字母O)是指在RadASM的输出窗口中显示所有执行命令行时的信息。如果这里是大写字母C,则是指在控制台中显示信息,不在输出窗口中显示。其它两个参数OT和CT与O和C含义类似。$D\RC.EXE /v 是指执行RadASM的Addins目录下的RC.EXE来编译后面的rsrc.rc到rsrc.res。/v是RC.EXE的命令行选项。LCC自带有一个资源编译程序,我原来是这样配置的:1=$.res,O,$B\LRC.EXE /v,$.rc 这里的$是指从RadASM编辑器的最顶部标题栏中获取的不带扩展名的文件名。如我打开一个工程中的文件,RadASM的顶部标题显示如下:
RadASM - dialog - [E:\RadASM\Lcc\projects\dialog\dialog.cpp] 
此时$取的内容就是 dialog.cpp 中的 dialog (注意:在RadASM中新建一个工程时有两个选项:一个是工程名称,一个是工程说明。打开一个工程时若不打开任何文件的话,在RadASM的顶部显示的是工程说明的内容,但此时你进行编译的话RadASM取的是工程名称。如我建的工程名称是dialog,工程说明是对话框示例,打开这个工程不打开任何文件时RadASM顶部显示的就是RadASM - 对话框示例,但在编译工程时$还是用的工程名称dialog)。这样如果编译上面的示例工程的话,1=$.res,O,$B\LRC.EXE /v,$.rc 就相当于这样(假定你的LCC编译器的目录放在放在E盘的根目录下,如:E:\LCC,这里的$B是从上面的[Paths]段中来的,你配置好了的话$B就等同于E:\LCC\Bin目录):
1=dialog.res,O,E:\LCC\Bin\LRC.EXE /v,dialog.rc
为什么没再用LCC原来自带的资源编译器呢?主要是我配置好后测试时,我明明在对话框中选的是宋体,9号,可编译后的程序按钮上显示的不知是什么字体,而且还是个斜体。搞得我还以为那里弄错了,查了半天。后来看LCC的用户手册,才知道它的资源编译器还不支持字体,说正在改进中。为此,我就放弃了它的资源编译器,还是用微软的吧。这里注意要把RC.EXE复制到你RadASM的Addins目录下。如果你是用我做的汉化版的话,这一步可省略。

2=$.obj,O,$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I",$.cpp

//这条用于编译程序,$.obj,O 两个与上面讲的类似,也是先删除你所做工程名字.obj,在输出窗口中输出信息。$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I" 是编译选项,后面的/I"$I"是查找include目录用的。$I就是LCC下的include目录,如LCC装在E盘根目录的话(下面我再讲的时候都默认你的RadASM和LCC都装在E盘根目录下),$I就代表E:\LCC\include目录。其实上面这句在下面具体定义的工程项中还可以这样写:
2=3,O,$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I",2
这里与上面那句不同的地方就是把$.obj换成了3,$.cpp换成了2。为什么可以这样换?这是根据[MakeFiles]段中定义的文件类型对应的序号来的。看一下[MakeFiles]段,其中 2=.cpp 3=.obj 这里的替换后的2和3就是对应你工程名的cpp和obj文件,与$.cpp和.obj功能相同。

3=$.exe,O,$B\LCCLNK.EXE /s /SUBSYSTEM WINDOWS,$.obj,$.res

//这条用于连接程序。各条对应情况与前面的两条类似。假设你象我一样测试的是E:\RadASM\Lcc\Projects\dialog\dialog 下的dialog工程,$B\LCCLNK.EXE /s /SUBSYSTEM WINDOWS,$.obj,$.res执行后效果是这样:
E:\Lcc\Bin\LCCLNK.EXE /s /SUBSYSTEM WINDOWS "dialog.obj" "dialog.res"
同样你也可以在具体项目定义中把$.exe对应换成5,$.res对应换成4。

4=0,0,,$.exe

//这条命令是运行编译好的程序。这里的0,0(注意是数字0),照抄别的就可以了。只是如果编译的是控制台程序的话,为防止运行时看不到效果,可这样写:4=0,0,$D\RunStub,$.exe 这里的RunStub.exe是我上次发现在RadASM中运行dos程序看不到效果,就跟RadASM的作者说了一下,他提供的这个小工具,现在已包含在masm的Projects目录中了。把它复制到Addins目录即可。另外你也可以用LCC的Bin目录下的一个rundos.exe小工具,不但支持按任意键退出,还可显示执行时间,推荐。可以在控制台工程中这样配置:4=0,0,$B\rundos.exe,$.exe

上一页  [1] [2] [3] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    推荐文章 瑞星公司02月13日发布 每日计算机病毒及木马播报
    普通文章 优化C++程序编译效率的实例
    普通文章 分析蠕虫及压缩的网络流量
    推荐文章 推荐:突破Icesword实现文件隐藏
    普通文章 如何配置RadASM来支持你的编译器
    普通文章 深入剖析EFS文件加密系统
    普通文章 网络安全重心正从被动检测转向主动防御
    普通文章 洪流来袭——剖析“拒绝服务”攻击
    普通文章 明星激情照被黑客利用 三种"阴谋"方式传毒
    普通文章 节后上班当心潜伏木马 节后上班应先杀毒
    热门文章
    普通文章入侵工具Knark的分析及防范
    普通文章认清本质 计算机病毒防治常遇问题
    普通文章假日警惕虚假淘宝网诈骗
    普通文章饶过现代Anti-Rookit工具的内核模块扫描(ZT)
    普通文章WordPress WassUp插件 spy.php脚本含SQL注入漏洞
    普通文章Icesword 驱动部分分析(ZT)
    普通文章[Tips]XSS Worm Defense
    普通文章文图分析:钓鱼网站拿什么欺骗善良玩家
    普通文章Gnumeric XLS HLINK Opcode处理远程代码执行漏洞
    普通文章SwiftView ActiveX控件和浏览器插件含栈溢出漏洞
    精彩专题