??xml version="1.0" encoding="utf-8" standalone="yes"?>色诱久久久久综合网ywww,狠狠干狠狠久久,伊人久久精品无码av一区http://m.shnenglu.com/aganno2/archive/2006/12/14/16451.htmlaganno2aganno2Thu, 14 Dec 2006 12:21:00 GMThttp://m.shnenglu.com/aganno2/archive/2006/12/14/16451.htmlhttp://m.shnenglu.com/aganno2/comments/16451.htmlhttp://m.shnenglu.com/aganno2/archive/2006/12/14/16451.html#Feedback5http://m.shnenglu.com/aganno2/comments/commentRss/16451.htmlhttp://m.shnenglu.com/aganno2/services/trackbacks/16451.html

作者: AGanNo2

Email:AGanNo2@163.com

1.VC ?/span> IDE 在编译链接做了些什?/span>

用惯?span lang="EN-US" style="FONT-FAMILY: Verdana">VC?span lang="EN-US" style="FONT-FAMILY: Verdana">IDE下习惯性的点击“compile?/span>?span lang="EN-US" style="FONT-FAMILY: Verdana">“build?/span>的可能不知道在你按下q些按钮?span lang="EN-US" style="FONT-FAMILY: Verdana">IDE在背后到底做了写什么,对于熟悉命o行下q行~译链接的h?span lang="EN-US" style="FONT-FAMILY: Verdana">cl.exe?span lang="EN-US" style="FONT-FAMILY: Verdana">link.exe?span lang="EN-US" style="FONT-FAMILY: Verdana">rc.exeq些~译链接的工具不是陌生的Q在q里我ƈ不想讨论q些工具怎样q行~译的以及那些名目繁多的选项参数Q而是?span lang="EN-US" style="FONT-FAMILY: Verdana">?/span>亚微?span lang="EN-US" style="FONT-FAMILY: Verdana">?img height="19" src="http://m.shnenglu.com/Emoticons/regular_smile.gif" width="19" border="0" />上揭开在你点击那些按钮之后Q?span lang="EN-US" style="FONT-FAMILY: Verdana">IDE在背后干的事情,肯定有初学者像我一h了解Q当焉?span lang="EN-US" style="FONT-FAMILY: Verdana">unix/linux下的E序员以及会?span lang="EN-US" style="FONT-FAMILY: Verdana">makefile来组l编译链接进E的Profession的程序员׃用看下去了?/p>

2.vcspawn 的选项和参?/span>

vcspawnQ突然说到这个可能很多不大熟Q其实在你点击那些按钮的时候,q不是由IDE自己直接去调?span lang="EN-US" style="FONT-FAMILY: Verdana">cl.exe?span lang="EN-US" style="FONT-FAMILY: Verdana">link.exe?span lang="EN-US" style="FONT-FAMILY: Verdana">rc.exeq些工具的,而是通过vcspawn.exeq个工具q行中{的,单说IDE把参C递给vcspawnQ然后由vcspawn来徏立进E去执行q些~译链接的命令,然后把编译链接过E中的信息输出到IDE的最下面的输出窗口的Q在q里vcspawn的输重定向到那个H口?span lang="EN-US" style="FONT-FAMILY: Verdana">(一般通过道)Q而由vcspawn新徏的进E由于承了父进E的输出Q因此也会把重定向到IDE的输出窗口?/p>

下面是个典型?span lang="EN-US" style="FONT-FAMILY: Verdana">IDE?span lang="EN-US" style="FONT-FAMILY: Verdana">vcspawn传递的参数Q?span lang="EN-US" style="FONT-FAMILY: Verdana">(M$对这些参数好像一Ҏ都没有Q这些是通过调式手段截获?img height="19" src="http://m.shnenglu.com/Emoticons/regular_smile.gif" width="19" border="0" />)

VCSPAWN.EXE -e 1380 -m ~vcecho!Compiling resources...\n
rc.exe /l 0x804 "/foRelease/SSDowner.res" /d "NDEBUG" "D:\Microsoft Visual Studio\MyProjects\test\test.rc"\n
~vcecho!Compiling...\n
cl.exe @C:\DOCUME~1\STILLW~1\LOCALS~1\Temp\RSP5.tmp\n
~vcecho!Linking...\n
link.exe @C:\DOCUME~1\STILLW~1\LOCALS~1\Temp\RSP6.tmp\n

可以看到q里只有两个选项 -e ?/span> -m, 当然q会有其他的Q后文再?/span>

其中-e 1380中的参数1380?span lang="EN-US" style="FONT-FAMILY: Verdana">IDE的进E句柄或者管道句柄?span lang="EN-US" style="FONT-FAMILY: Verdana">-m后面带的参数比较长,也是有规律的Q据观察Q他们以'\0xa'作ؓ分割W,~vcecho!也是一个关键字Q它表示后面的在\n之前的字W串被输出?/span>IDE的输出窗口里Q这h们在~译的过E中也就看到?/span>Compiling resources...?/span>Compiling...?/span>Linking...q些表示~译q程的信息,cM~vcecho!的词q有~vctime!?/span>~vcsleep!Q我想不用多解释明白它们是什么意思了?/span>

下面看由'\0xa'分割得到的其它三句:

rc.exe /l 0x804 "/foRelease/SSDowner.res" /d "NDEBUG" "D:\Microsoft Visual Studio\MyProjects\test\test.rc"

cl.exe @C:\DOCUME~1\STILLW~1\LOCALS~1\Temp\RSP5.tmp

link.exe @C:\DOCUME~1\STILLW~1\LOCALS~1\Temp\RSP6.tmp

vcspawn 把q些做ؓ命o行分别徏立新的进E。在q里Q很明显只有 rc.exe l出了比较详l的链接参数Q也难怪因Z般资源文件只有一个就够了Q而源文g和目标文件会有多个,于是 cl.exe ?/span> link.exe 的参C只有它们的时文Ӟq些临时文g RSP5.tmp ?/span> RSP6.tmp Q名U随机)的内容大致如下: ( ?/span> IDE 清理删除它们之前拯q来?/span> ) Q?/span>

RSP5.tmp

/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"Release/test.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
"D:\Microsoft Visual Studio\MyProjects\test\main.c"

RSP6.tmp

kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:no /pdb:"Release/test.pdb" /machine:I386 /out:"Release/test.exe"
".\Release\main.obj"

".\Release\test.res"

分别是编译器(cl.exe)和链接器(linke.exe)的参敎ͼ熟悉命o行编译链接的对这些应该很熟悉?/p>

vcspawn除了-e?span lang="EN-US" style="FONT-FAMILY: Verdana">-mq连个参数外Q还?span lang="EN-US" style="FONT-FAMILY: Verdana">-t -p(一般放在一?span lang="EN-US" style="FONT-FAMILY: Verdana">)Q甚臛_你点?span lang="EN-US" style="FONT-FAMILY: Verdana">“execute?执行)的时候,也ƈ不是?span lang="EN-US" style="FONT-FAMILY: Verdana">IDEȝ接执行连接后的可执行文gQ而还是由vcspawn作ؓ中{Q?span lang="EN-US" style="FONT-FAMILY: Verdana">vcspawn启动可执行文件的参数如下:(q个bill也不告诉?span lang="EN-US" style="FONT-FAMILY: Verdana">)

vcspawn.exe -t -p 'D:\Microsoft Visual Studio\MyProjects\test\Release\test.exe"

q个可以解释ؓ什么在 IDE 下点?/span> “execute?/span> L行编译后的程序后都会?/span> "Press any key to continue" q句Q而且在按了一个键后才l束Q这些在我们的程序中q没有这些,q些都是位于 vcspawn.exe 中的Q这也是初学者直接点M个自己写?/span> console E序后看到屏q一闪而过的原?/span> ( 当然q所有的E序都这?/span> )

3. 逆向写兼容的 vcspawn

在通过阅读vcspawn的反汇编代码了解其大致流E后Q就开始了俺的逆向重构的过E,用的?span lang="EN-US" style="FONT-FAMILY: Verdana">CQ由于严格按?span lang="EN-US" style="FONT-FAMILY: Verdana">vcspawn的反汇编代码的逻辑来写的,所以花了我q一天的旉Q力求做到逻辑上的一?span lang="EN-US" style="FONT-FAMILY: Verdana">(甚至是汇~代码别上的,吹牛?span lang="EN-US" style="FONT-FAMILY: Verdana">)Q由?span lang="EN-US" style="FONT-FAMILY: Verdana">VC6.0?span lang="EN-US" style="FONT-FAMILY: Verdana">vcspawn的版本是6.00的,因此自己写的兼容?span lang="EN-US" style="FONT-FAMILY: Verdana">vcspawn?span lang="EN-US" style="FONT-FAMILY: Verdana">vc6.0?span lang="EN-US" style="FONT-FAMILY: Verdana">evc4.2上工作的很好(攑֜我机?span lang="EN-US" style="FONT-FAMILY: Verdana">D:\Microsoft Visual Studio\Common\MSDev98\Binq个目录里,覆盖原版)Q不窃?img height="19" src="http://m.shnenglu.com/Emoticons/teeth_smile.gif" width="19" border="0" />Q?span lang="EN-US" style="FONT-FAMILY: Verdana">vc2003的看了一下,也无多大区别(参数有点区别)Q已无兴再做重复的事情?/p>

vcspawn大都调用的都?span lang="EN-US" style="FONT-FAMILY: Verdana">msvcrtq个库的东西Q而且是多U程动态链接的(/MD),~译q接后体U只?span lang="EN-US" style="FONT-FAMILY: Verdana">7.5k,可谓y?/p>

4. q个有什么用Q?/span>

是啊Q有什么用呢,在我自己写的 vcspawn 中我实现了输出那些编译链接的l节Q就差没把时文件拷q来?/span> ( q个不难 ) Q其它的可以在其中加入自p执行的命令或者输Z些更详细的信息。不q说q来好像q是无大用处Q不q我自q自的弄明白了 IDE 到底q了些啥Q顺便练了下逆向工程

最后抓个图留做U念


其中U色的部分是兼容性版本的vcspawn输出的编译链接中输出的详l信息?/p>

最后附上源代码及编译好的可执行文ghttp://m.shnenglu.com/Files/aganno2/vcspawn.zip



aganno2 2006-12-14 20:21 发表评论
]]>
VC6.0 SP6的IDE的一个BUGQ?/title><link>http://m.shnenglu.com/aganno2/archive/2006/11/25/15661.html</link><dc:creator>aganno2</dc:creator><author>aganno2</author><pubDate>Sat, 25 Nov 2006 12:15:00 GMT</pubDate><guid>http://m.shnenglu.com/aganno2/archive/2006/11/25/15661.html</guid><wfw:comment>http://m.shnenglu.com/aganno2/comments/15661.html</wfw:comment><comments>http://m.shnenglu.com/aganno2/archive/2006/11/25/15661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/aganno2/comments/commentRss/15661.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/aganno2/services/trackbacks/15661.html</trackback:ping><description><![CDATA[ <p> <font size="2">q是前一阶段发现的,׃解决该问题花费了我几乎半天的旉Q因此记忆犹斎ͼ<br />BUG描述Q?br />        在VC6.0 SP6?我用的是中文?在逻辑驱动器根目录下的名ؓtemplate的目录中建立的工E用IDE提供的编译按钮默认不会编译!<br />        举个例子Q在目录F:\template或C:\template\123目录下徏立的工程TestQTest中只有一个文件test.cppQ当点击菜单中的“编译”或“组建”按钮时Q貌似编译完成了Q见C</font> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">--------------------</span> <span style="COLOR: #000000">Configuration: Test </span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000"> Win32 Debug</span> <span style="COLOR: #000000">--------------------</span> <span style="COLOR: #000000"> <br /> <img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /> <br /> <img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />test.cpp </span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000"> error(s), </span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000"> warning(s)<br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span> </div> <br />提示。这时点L行时出现错误Q如下所C:<br /><img height="114" alt="cc.GIF" src="http://m.shnenglu.com/images/cppblog_com/aganno2/cc.GIF" width="184" border="0" /><br />q时到工E的目录下面看时实没有~译和连接,没有生成test.obj和test.exe文g?br />怀疑是test.dspZ问题Q因为VC6.0的IDE的编译依据是*.dsp?.dswq两个描q工E的文g。通过对照发现如下不同Q?br /><br />IDE不能~译的Test工程test.dsp中:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><p><span style="COLOR: #000000"><font style="BACKGROUND-COLOR: #eeeeee"># Begin Group "Source Files"</font></span></p><p><span style="COLOR: #000000"><font style="BACKGROUND-COLOR: #eeeeee"># PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"<br /><font color="#ff0000"># Begin Source File</font></font></span></p><p><span style="COLOR: #000000"><font style="BACKGROUND-COLOR: #eeeeee"><font color="#ff0000">SOURCE=.\test.cpp<br /># PROP Exclude_From_Scan -1<br /># PROP BASE Exclude_From_Build 1<br /># PROP Exclude_From_Build 1<br /># End Source File</font><br /># End Group</font></span></p></div><br />IDE能编译的Test工程test.dsp中:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"># Begin Group </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Source Files</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /># PROP Default_Filter </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /><img src="http://m.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /># End Group</span></div> 上面只列出料两个文g的不同处Q小弟不懂dsp文g的格式,但单由IDE不能~译的Test工程test.dsp中的Exclude_From_Scan Exclude_From_Build q些字眼中猜x思应该是test.cpp文g没有在被~译的文件之列,所以IDE下编译不能进行!(ȝ哪儿有关dsp文g资料的告诉个地方Q?<br />当然修改test.dsp文g后又能正编译了Q?br />直接在命令行下直接编译是能成功的(cl test.cpp)<br /><br />另外Q经试发现Q不能用VC6.0 sp6中的IDE的工具创建名字ؓtemplate的工E,会出C下错误:<br /><img height="114" alt="cw2.GIF" src="http://m.shnenglu.com/images/cppblog_com/aganno2/cw2.GIF" width="249" border="0" /><br />好了Q就是这么多了,搞不清楚q是VC的IDE的BUGQ还是M$默认的规则,不过在VC2003下没有上q错误发生,看来旧的东西是要被代替的Q怎乃用VC6.0太久Q舍不得割舍~~<br />q儿描述的问题也许您从来不会遇到q,不过是俺遇CQ记下,留个U念~~<br />q也是俺在C++blog园的W一D|字!<br /><img src ="http://m.shnenglu.com/aganno2/aggbug/15661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/aganno2/" target="_blank">aganno2</a> 2006-11-25 20:15 <a href="http://m.shnenglu.com/aganno2/archive/2006/11/25/15661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.qhd33.cn" target="_blank">þ99Ʒ</a>| <a href="http://www.gmve.cn" target="_blank">vaþþþ </a>| <a href="http://www.941ad.cn" target="_blank">ƷѸþ</a>| <a href="http://www.rentieyou.cn" target="_blank">þAVۺϺɫ </a>| <a href="http://www.huaigutang.cn" target="_blank">99ƷþþþĻ</a>| <a href="http://www.gzquanjing.cn" target="_blank">ҹþþþþþþõӰ</a>| <a href="http://www.ccbaocheng.cn" target="_blank">ݺɫۺվþþþþþø</a>| <a href="http://www.e-meng.com.cn" target="_blank">þþƷձҰ</a>| <a href="http://www.angfei.com.cn" target="_blank">޾ƷþþӰԺӰƬ </a>| <a href="http://www.h3cedu.cn" target="_blank">þô̫㽶av</a>| <a href="http://www.tuomao8.cn" target="_blank">޹ƷþõӰŷ</a>| <a href="http://www.snryw.cn" target="_blank">þþƷþ</a>| <a href="http://www.hjj9588.cn" target="_blank">þþƷѿ</a>| <a href="http://www.axtea2007.cn" target="_blank">޾Ʒһþþ</a>| <a href="http://www.chahexinqu.cn" target="_blank">99þþƷһ</a>| <a href="http://www.tdstudio.com.cn" target="_blank">޾ƷNVþþþþþþþ</a>| <a href="http://www.dangong02.cn" target="_blank">þþƷҹƬ</a>| <a href="http://www.cpp521.cn" target="_blank">պӰþþñ</a>| <a href="http://www.fengdingjun.cn" target="_blank">þþƷ˘AV</a>| <a href="http://www.xinhuahz.cn" target="_blank">þ2019Ļ</a>| <a href="http://www.taiguolu.com.cn" target="_blank">þ˽˹ƷvA</a>| <a href="http://www.i-ss.com.cn" target="_blank">ŷһþþƷ</a>| <a href="http://www.zhougong.net.cn" target="_blank">ɫۺϾþþþ</a>| <a href="http://www.zheibvgsz.cn" target="_blank">þþþƷ2019ѹۿ</a>| <a href="http://www.wowokk.cn" target="_blank">ղƷþþþþþ</a>| <a href="http://www.jswlgs.cn" target="_blank">þWWW˳ɡƬ</a>| <a href="http://www.vhro.cn" target="_blank">Ʒþþþþø </a>| <a href="http://www.wggls.cn" target="_blank">þ޾Ʒavվ</a>| <a href="http://www.cnmango.cn" target="_blank">þ޹Ʒ123</a>| <a href="http://www.xsq1.cn" target="_blank">þþžžƷ99Ʒ</a>| <a href="http://www.symfony.net.cn" target="_blank">ӰɫۺϾþ</a>| <a href="http://www.kmqqk.cn" target="_blank">ƷˮҾþþþþþ</a>| <a href="http://www.fvnnv.cn" target="_blank">99þѹۺϾƷ</a>| <a href="http://www.hohong.com.cn" target="_blank">ƷŮٸAVѾþ</a>| <a href="http://www.sdlove.cn" target="_blank">Ʒľþþþþþ</a>| <a href="http://www.wshoponlinet.cn" target="_blank">ƷþþþþҰ</a>| <a href="http://www.fjprxr.cn" target="_blank">ŷ龫Ʒþþþ</a>| <a href="http://www.63550.com.cn" target="_blank">þøݾƷԴվ</a>| <a href="http://www.jsshunfu.com.cn" target="_blank">ɫ͵͵͵þ˴ý</a>| <a href="http://www.ampv.cn" target="_blank">vĻþ</a>| <a href="http://www.xxupng.cn" target="_blank">2020þþƷۺһ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>