※ 引述《leicheong (理昌)》之銘言:
> ※ 引述《UNARY.bbs@bbs.cse.ttu.edu.tw (Rootkit Researcher)》之銘言:
> > 其實他想問的只是..
> > 難道編譯器已經聰明到:
> > 原本明明要 push「字串 "%d"」和「整數 10」兩個參數
> > 最後結果會只有一個「字串 "10" 」嗎?
> > 這樣而已
> > 所以先前您回他
> > 關於 library/package/DLL/calling convension 這些部分
> > 也難怪他總是得不到他所想知道的重點囉..
> 噢... 我倒忘了自己把真正function call的部份strip去了... :P
> 00401028 |. 68 D8604000 PUSH test.004060D8 ; ASCII "%d"
> 0040102D |. E8 09000000 CALL test.0040103B
以上是未optimize的版本, optimize後的版本如下(完整的main()):
00401000 /$ 6A 0A PUSH 0A
00401002 |. 68 D8604000 PUSH test.004060D8 ; ASCII "%d"
00401007 |. E8 06000000 CALL test.00401012
0040100C |. 83C4 08 ADD ESP,8
0040100F |. 33C0 XOR EAX,EAX
00401011 \. C3 RETN
> 在push 10後是有再push "%d"的指標啦, 不過這裡有一點有趣的地方,
> 就是"%d"這字串的位置不在data segment(00408000-00409FFF)
> 也不在code segment(00401000-00405FFF),卻在.rdata(00406000-00407FFF)裡,
> 真想不到.
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: ip-84-126-134-202.rev.dyxnet.com