精華區beta Programming 關於我們 聯絡資訊
※ 引述《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