posts - 9,comments - 14,trackbacks - 0
				

对于C++来说,几乎所有的编译器都能够生成汇编指令输出,而其它语言则不一定。

以现在Windows平台流行的语言来说,主要是Visual C++、C++Builder和Delphi(其实本人也就熟悉这些语言 )。对于这些语言有相应的方法来获得其汇编代码:

【Visual C++】
命令行:
/FA 仅生成汇编文件
/FAcs 生成汇编、机器码以及源代码的对照文件
/FAc 生成汇编、机器码的对照文件
/FAs 生成汇编、源代码的对照文件




menu: project ==>settingsC/C++属性页 Category:选择Listing Files
设置listing file type为Assembly with source code 键入需输出的asm文件名xxx
[或直接在底下的Project Option栏内键入' /Fa "xxx" ']









Link属性页 勾选Generate mapfile
[或直接在底下的Project Option栏内键入' /map:"Debug/Test.map" '] OK,工程目录下将有汇编文件xxx.asm









【C++Builder】
命令行:
/B 生成汇编文件,并调用汇编程序进行汇编
/S 生成汇编、源代码的对照文件


【Delphi】
这件事情有点复杂,实际上Delphi并不支持汇编输出,那怎么办?
好在Delphi有一个功能强劲的调试程序,编译以后执行程序,设置适当的断点,通过调试器提供的反汇编功能对程序进行
反汇编,从而得到相应段落的汇编代码。





这实际上是一种通用的策略,包括上述的Visual C++和C++Builder也可以用同样的方式进行。


另外一种方法就是要通过一些辅助的反汇编工具了,将这些软件生成的OBJ文件进行反汇编,从而获得相应的代码。
当然, 其反汇编出来的文件效果绝对赶不上这些语言开发工具自己生成的效果好,可是总还是有些用处的。

对于早期的编译软件,例如Microsoft的FORTRAN以及编译BASIC等,这些系统都支持一种代码输出的选项,
能够生成.COD文件。这种文件是伪宏汇编格式的文本文件,其作用基本相当于汇编文件,只是通不过重新汇编而已,
然而,这种文件有时并不包含源代码行,看起来比较费劲(这主要是因为两遍编译的结果)。
posted on 2006-04-19 04:17 阵雨 阅读(3646) 评论(1)  编辑 收藏 引用

FeedBack:
# re: 让编译器生成ASM文件及Map文件
2007-12-14 10:24 | frank.sunny
非常感谢指点迷津,这个东西,我查了好久才在这里查到,蛮有用的  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理