精華區beta Programming 關於我們 聯絡資訊
※ 引述《leicheong.bbs@bbs.sayya.org (理昌)》之銘言: : ※ 引述《leicheong (理昌)》之銘言: : > 噢... 我倒忘了自己把真正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)裡, : > 真想不到. 你又一次不經測試就直接回其他的網友. 當網友質疑 compiler 不太可能 把兩個 printf 的參數, 最佳化成一個參數時, 你連測試都沒有測試就直接 回答是某某原因, 當別人對你的 "解答" 有疑問後, 你又沒有測試就回答另 一個原因, 結果你的回答還是不對, 你又再換了一個. 重頭到尾你一共說了 library/package/DLL/calling convension 這幾個原因使 compiler 把兩個 printf 的參數最佳化成一個, 結果, 最後證實 compiler 根本不會做這樣子 的最佳化, 你又一次的誤導網友. 光是這一個討論串你已是第二次不經測試就給錯誤的答案, 每次還說的一付很有 信心的樣子, 誤導其他的網友. 麻煩你以後測試後有把握再 "解答" 其他網友 的問題吧. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 69.236.127.197