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

如何配置RadASM来支持你的编译器

cao_cong 

   这两天打算配置一下RadASM来支持一下 LCC-Win32 和 Turbo C++ 3.0,虽然以前给 RadASM 配置过支持VC6的Cpp文件,但当时做完就没管了,我这人又比较懒,不愿写东西,导致现在再配置时很多东西都忘了。这次只好又重新研究了一番,费时费力。配置完LCC后真有点筋疲力尽,不管别的了,先把配置的过程写下来,一是以后要用时可以看看,二也希望写出来让大家看了也能对配置编译器的过程清楚一点,可以自己动手来配置RadASM支持自己喜欢的编译器。Turbo C++ 3.0 的配置我已经不太想继续干了,谁有兴趣配置好了的话别忘了给我发一份。
   在配置一个编译器之前,首先你要了解你所用的编译器编译、连接、资源编译程序的命令行选项,这样你配置时才能有的放矢。要知道相关程序的命令行选项的话你只需在命令提示符中输入相关程序就可得到。我一般喜欢在后面加一个 /? 参数。如这样:lcc.exe /? 。在控制台窗口中右击鼠标,把显示的命令行选项全选后复制到新建的一个文本文件,以便参考。我这次就以我配置的LCC编译器支持文件来作为模板,对各个部分进行讲解,可能比较罗嗦,主要还是想说清楚一点,让大家少走弯路。有什么说得不对的地方还请大家指正。另外我在配置时RadASM中提到的菜单及选项等都是基于我自己汉化的RadASM来谈的,如果给你造成了什么歧义的话,还请多多原谅。不浪费大家时间了,下面进入正题:
在开始之前,我把LCC-Win32 的命令行选项列出来(我都翻译过了),以便大家对照:
-------------------------------------------------------------------------
lcc.exe(编译程序) 命令行: 
选项 含义
-A 激活所有警告. 
-ansic 禁用lcc-win32的语言扩展. 
-D D后面跟随定义的符号. 例如:-DNODEBUG 定义
NODEBUG 符号. 注意: 在D和符号间没有空格
-check 检查给定源文件的错误. 不生成目标文件. 
-E 生成一个中间文件及预处理程序输出.输出文件名将根据输入文件名来生成, 如,编辑 foo.c 你将得到foo.i. 
-E+ 类似于 -E 选项, 还会生成一个#行号 xxx 指令,预处理程序生成一个 # xxx 指令. 
-EP 类似 -E 选项,但不生成 #行号 指令. 
-errout= 附加警告/错误信息到指定的文件.如 -errout=Myexe.err.将把所有警告和错误信息附加到 Myexe.err 中。 
-eN 设置最大错误数N. 例如:-e25. 
-fno-inline 忽略内联指令. 
-Fo<文件名> 强制输出文件名. 
-g2 生成调试信息. 
-g3 支持函数堆栈跟踪. 如果遇到一个中断,将显示函数堆栈. 
-g4 支持函数堆栈及行号跟踪.
-g5 支持函数堆栈,行号及返回调用堆栈崩溃跟踪. 
-I 把一个路径添加到包含的路径,如编译器查找头文件的路径.例:-Ic:\project\headers. 注意在I和后面跟随的路径之间没有空格.
-libcdll 使用用于 lcclibc.dll 的声明.用此选项编译的文件要在连接器 lcclnk 中使用 -dynamic 选项.
-M 在标准输出中显示当处理给定的输入文件时预处理程序打开的所有文件.不生成目标文件.
-M1 在标准输出中递归显示每个 include 文件,指出其调用自何处,何时关闭. 
-nw 不显示警告.错误仍将显示. 
-O 优化输出. 这将启动 peephole 优化器. 
-o <文件>用于给定输出文件的名称.与上面的 Fo 参数相同. 
-overflowcheck 
生成代码测试所有加,减,乘的溢出.
-p6 启用 Pentium III 指令
-profile 注入代码到已生成的程序中来测试执行时间.此选项不兼容调试级别高于 2 的程序. 
-S 生成一个汇编文件. 输出文件名依赖于输入文件.如:编辑 foo.c 你将得到 foo.asm. 
-s n 设置转换密度为 n ,值必须在 0.0 和 1.0 之间. 如: -s 0.1 
-shadows 当一个本地变量覆盖了一个全局变量时警告. 
-stackinit n 
函数入口值为 "n" 时初始化未初始化的堆栈.
-U 未定义符号跟随在U后面. 
-unused 警告未使用的分配并禁止垃圾代码.
-v 显示编译器版本和编辑日期
-z 生成一个 LCC 中间语言的文件.生成的文件以 .lil 为扩展名. 
-Zp[1,2,4,8,16] 设置结构的默认队列为一, 二, 四,等. 
如果你设为一,实际上等于无队列.
------------------------------------------------------------------------- 
命令行选择区分大小写.使用 "-" 或 "/" 在
命令行中引入选项. 

------------------------------------------------------------------------- 
lcclnk.exe(连接程序) 命令行: 
Lcclnk 命令行选项.使用 "-" 或 "/" 在命令行中引入选项. 
-o <文件名> 
设置输出文件名称.请在 o 和文件名间插入一个空格.
-errout<文件名> 
把所有警告/错误信息写入到指定名称的文件. 
-subsystem <subsystem> 
指出输出文件类型. Console 或 windows 程序
-stack-commit <数字> 
选择此选项,你可以提交多于一个的页面(4096 字节). 
-stack-reserve <数字> 
默认堆栈大小为 1MB. 用此选项改变限制. 
-dynamic
使用 lcclibc.dll 作为默认库并动态链接到程序,用以代替连接到 libc.lib. 
-dll 
此选项告诉连接程序这是一个 .dll 文件而不是一个 .exe 文件. 
-map <文件名> 
指定 map 文件名.此选项不兼容 -s 选项. 
-nolibc 
不包括标准 C 程序库. 
-s 
从程序中去除所有符号和调试信息.
-version nn.nn
为程序添加版本号.
-errout=<文件名> 
写入所有警告或错误到给定名称的文件.注意在文件名和等号间没有空格.
-nounderscores 
例如创建一个用于 Visual Basic 的 DLL 时,最好 DLL 的输出函数名没有下划线.
-entry <fnname>
设置 DLL 的入口点函数
-version
输出版本名称

-------------------------------------------------------------------------
lcclib.exe(编译库(Lib)的工具) 命令行: 
格式: 
lcclib <libfile.lib> <目标文件> 
选项: 
/out:输出文件
/extract:目标
/remove:目标
/verbose: 显示输出过程
默认同名的目标文件将被替换

-------------------------------------------------------------------------
lrc.exe(编译资源脚本的程序) 命令行: 

用法: lrc [选项] .RC 输入文件
选项: 
/r: 生成 .RES 文件.这是预设好的... 
/v: 显示细节(Verbose)
/z: 生成一个 .map 文件.名称依赖于输入文件
/d: 定义符号
/o: 输出到指定文件. 
’o’ 和文件名间没有空格
/fo: 输出到指定文件. 
’o’ 和文件名间没有空格
/l: 默认语言号
后面应立即跟随十进制的语言号.’l’和语言号之间没有空格
/i: 添加一个 include 路径. 
’i’和路径间没有空格
/a: 写打包文件(图标,位图, 等等) 
选项不区分大小写
-------------------------------------------------------------------------
   配置一个让RadASM支持的编译器只需写一个INI文件,把各个段配置好。配置好后放在RadASM目录,直接在RadASM的菜单选项->编程语言中把你的配置文件添加进去就可以了。我这里把配置的文件命名为Lcc.ini,我把每个段都列出来(列主要我们要配置的部分),各个段的含义我在每个列出的段后用“//”开头的注释说明。
[Description]
1=Lcc Win32

//这个段是对你配置的编译器描述,你可以随便写。

[Enviroment]
1=path,C:\Lcc\Bin;

//这相当于环境变量,RadASM会到path后面指定的路径查找相关程序。

[CharTab]
2=0251222522222236;20-2F
3=1111111111222221;30-3F

//字符表定义,0到127的默认字符表,与我们没多少关系,随便在RadASM中找一个配置好的编译器支持文件复制过来就行了。

[Open]
0="C++ 文件 (*.c;*.cpp;*.h),*.c;*.cpp;*.h"
1="资源文件 (*.rc),*.rc"
2="文本文件 (*.txt),*.txt"
3="宏文件 (*.dsm),*.dsm"
4="所有文件 (*.*),*.*"
src="C++ 文件 (*.cpp),*.cpp,cpp"
hdr="头文件 (*.h),*.h,h"
mod="模块 (*.cpp),*.cpp,cpp"

//工程中默认打开的文件类型列表,根据你的编译器源文件类型进行修改。

[CodeMacro]
;关键字,活动行前插入,活动行后插入
;{I}=从关键字行复制缩进
;{C}=回车符
;{S}=空格符
;{T}=制表符
;{$}=复制 Proc/Struct 名称
;宏的设置默认已开启自动缩进
1=if(),{{C}{T},{C}{I}}
2=else,{T},
3=elseif,{T},
4=while,{T},{C}{I}
;5=
6=$Content$nbsp;),{{C}{I}{T},{C}{I}}
7=struct $,{T},{C}{I}}
8=for(),{{C}{T},{C}{I}}
9={,{T},{C}{I}}
;10=

//这个段称之为代码宏,就是当你在RadASM的编辑器中输入代码时根据你的输入自动完成的内容。“;”后为注释,我翻译了一下。我们选1=if(),{{C}{T},{C}{I}}这条来讲解一下其含义:1是序号,不用多说,if(),{{C}{T},{C}{I}}是指当我在编辑器中输入if()回车后,首先在第二行开始输出一个“{”再自动回车到下一行开始输出一个制表符,再回车到第四行把第一行的if()开始位置复制过来,后面跟一个“}”,光标的位置定位在第二行的制表符后。实际效果如下:
if()
{
   //光标位置
}
if(),{{C}{T},{C}{I}}中if()是指自动完成时的关键字,紧跟在逗号后的{{C}{T}指在活动光标前插入的字符,最后的{C}{I}}是指在活动光标后插入的字符。在这个段中的{$}是用来复制函数或结构名称的。我在6=$Content$nbsp;),{{C}{I}{T},{C}{I}}中配置的$Content$nbsp;)是希望我输入一个函数并加 )后能自动给我完成的,可惜好象工作的不好,只对汇编的编译器有效。

[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控件和浏览器插件含栈溢出漏洞
    精彩专题