※ 引述《UNARY.bbs@bbs.cse.ttu.edu.tw (Rootkit Researcher)》之銘言:
> ※ 引述《leicheong.bbs@bbs.sayya.org (理昌)》之銘言:
> > 不需要的吧.
> > 如果b的值會改變的話, 你應該用&b (例如"scanf("%d", &b);")
> > 不是這樣的話, 直接把數值傳過去就可以了.
> 其實他想問的只是..
> 難道編譯器已經聰明到:
> 原本明明要 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
在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