使用了比较久VC6.0,但是从来没有关注过VC的详细编译过程,刚好同事这两天做反编译工作,所以就查了一下VC的编译工具cl的编译设置。
下面简单的说两个我自己比较关注的问题:
1、让VC在编译过程显示详细的参数(去掉/nologo):
那么,编译过成的输出如下:
--------------------Configuration: test - Win32 Debug--------------------
Compiling...
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
cl /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FAs /Fa"Debug/" /FR"Debug/" /Fp"Debug/test.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
"E:\work\test\test\2-2.c"
2-2.c
Note: Creating precompiled header Debug/test.pch
2-2.obj - 0 error(s), 0 warning(s)
可以看到,所有的编译参数了。
2、只编译生成对应的汇编文件:
在反编译过程其实主要是分析汇编文件的,但是为了把我们所做的反编译结果(就是C语言结果)进行验证,就必须重新编译成汇编结果,并与之前的汇编语言进行对比,一致才说明自己结果的正确性。
如果要生成汇编文件,需要设置如下选项:
这样在VC的生成目录(Release/Debug),就生成对应的汇编文件了。
有关于详细的编译参数和相关设置,可以参考:VC6.0编译参数设置