Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 1 decade ago

請問學c++有辦法自己修改程式嗎?

最近想學c++

請問學完c++後有能力自己修改程式嗎?

因為我自己還蠻想修改我自己所用的程式

感覺都有些小缺點

有辦法嗎?

Update:

我只是自己改自己用而已

Update 2:

不好意思造成大家筆戰

那可否再請問

我沒有任何程式語言的基礎下

直接學C++妥當嗎?

Update 3:

另外再問C和C++有何不同之處呢?

4 Answers

Rating
  • 1 decade ago
    Favorite Answer

    不會是 No Way 喔!

    那叫逆向工程!

    連微軟的東東都可以被逆向工程了,哪個軟體公司這麼神!?

    賣出來的軟體,不能被逆向工程,變回〝原始〞碼?

    2008-08-26 21:19:28 補充:

    去看看 Samba 怎麼來的?

    逆向工程,可以把它們變回〝原始〞碼!

    我為何要在原始的外面加〝〞?

    因為,它太原始了!

    如:

    int main(void)

    { int i;

    printf("asdf%d", i);

    return 0;

    }

    變回的〝原始〞碼類似:

    int main(void) // main 太特殊了,可以變回原名

    { int intVariable0000;

    intFunc0000("asdf%d", intVariable0000); // 其它的大概都變不回來了

    return 0;

    }

    好看嗎?

    2008-08-26 21:30:46 補充:

    這麼簡單的小小程式,都變成這樣!

    加個 for, while, if 等,會更精采!

    Compile 時若加上

    1. 不放 Debug 碼、

    2. 不放 Debug 表

    3. 開啟複雜最佳化

    尤其是 3,那會使〝原始〞碼一團亂!

    for (a; ; c); 要逆轉回來就…

    有些 for 和 while 本來就很難分!

    再加上 loop unrolling 等!

    好好一個 loop,變回來時,保證要你看到哭!

    所以它是可能,不是不可能!

    只是,要是被在這方面訓練過的高手!

    2008-08-26 21:36:18 補充:

    逆向工程 (Reverse Engineering) 是否違法?

    不少的軟體使用合約是要求不可以做!

    (也就是暗示:技術上可以做!)

    抱歉!在多數的條件下,它是合法的!

    Samba 就是把 M$ 的網芳逆向工程後出來的東西!

    看看維基的 http://en.wikipedia.org/wiki/Reverse_engineering,

    就大約可以知道我說的是對是錯了。

    20年前及3年其都小小研究過 RE 的人 留。

    2008-08-26 22:02:01 補充:

    改別人的程式,基本上有兩種(以上的)層級:

     1. 機器碼

     2. 〝原始〞碼

    不管是哪一種,都叫逆向工程(Reverse Engineering, RE)!

    RE是否辦得到?辦得到的話,是否違法?

    不少的軟體使用合約 (EULA) 是要求不可以做 RE!

    也就是說:技術上,RE是辦得到的!

    不過,抱歉!

    據小弟了解,在多數的條件下,RE是合法的!

    Samba 就是把 M$ 的網路的芳鄰做 RE後出來的東西!

    連 M$ 的東東都可以被逆向工程了,哪個軟體公司這麼神!?

    賣出來的軟體,不能被逆向工程,變回〝原始〞碼?

    逆向工程,確定可以把它們變回〝原始〞碼!

    我為何要在原始的外面加〝〞?

    因為,它太原始了!

    如:

    int main(void)

    { int i;

    printf("asdf%d", i);

    return 0;

    }

    變回的〝原始〞碼類似:

    int main(void) // main 太特殊了,可以變回原名

    { int intVariable0000;

    intFunc0000("asdf%d", intVariable0000); // 其它的大概都變不回來了

    return 0;

    }

    好看嗎?

    連這麼簡單的小小程式,都變成這樣!

    加個 for, while, if 等,會更精采!

    Compile 時若再選了:

     1. 不放 Debug 碼、

     2. 不放 Debug 表

     3. 開啟複雜最佳化

    尤其是 3,那會使〝原始〞碼一團亂!

    舉二個例子來說:

     for (a; ; c); 要逆轉回來就…… // 繼續條件不見了!

    有些 for 和 while 本來就很難分!

    再加上 loop unrolling 等!// 一種 Compiler 可做的 最佳化

    好好一個 loop,變回來時,保證要你看到哭!

    圖片參考:http://tw.yimg.com/i/tw/ugc/rte/smiley_17.gif

    所以它是可能,不是不可能!

    只是,要是被在這方面訓練過的高手!

    不相信我說的,可以參考一下維基的 http://en.wikipedia.org/wiki/Reverse_engineering

    裡的 RE of software 及

    http://en.wikipedia.org/wiki/Reversing:_Secrets_of...

    就大約可以知道我說的是對是錯了。

    不過,別忘了:

    不是學了程式,就可以做 RE 工程師!

    RE 工程師絕對是高手!

    據我估計,要當個合格的 RE工程師,程度應該要在我之上!

    不過,你若只是要小小改+只是要個人用,倒是不用到 RE工程師,就辦得到了。

    但,也不是一般大學資工畢業等級的人做得到的!

    (註:不少非資工科班出身的人,

      程度不見得比一般大學資工畢業差。)

    2008-08-26 22:03:25 補充:

    對了,有時連 intVariable 都不一定會出來!

    只知道:是個 Variable!

    2008-08-26 22:13:50 補充:

    對了,回應(應該說附和)一下 In老師的意見:

    RE 的確不容易。

    當你真的是RE 工程師時,身價可貴著!

    不會拿它來自家辦家家的啦!

    有公司要聘你當 RE 工程師 / RE 專案工程師時,

    必定是為了更高的利潤!

    但,(就我所知)這樣是違法的!

    違法的意思是?

    有人會做!!

    (不然,為何有洗錢防制法?)

    2008-08-26 22:18:32 補充:

    像中文維基就還介紹了 RE 為何有它合法的部份

    http://zh.wikipedia.org/wiki/%E9%80%86%E5%90%91%E5...

    2008-08-27 05:18:59 補充:

    你最後補問的那兩個,因見仁見智,我就不便直接回答。

    所以,寫在意見裡。

    這兩個問題,一堆人在知識+問過。你可以搜尋看看。

    簡言之:直接學C++並無不妥。

    個人覺得:利遠多於弊。

    另外,以台灣/美國目前的工業市場而言,

     台灣要 C,美國要 C++。(偏向啦,不是絕對。)

    C和C++不同處,ㄝ,說多不多,說少不少!

    所以,決定在個人論壇開一篇,可以慢慢說、慢慢補充。

    最後,囉唆一項,澆你冷水兩盆!

    2008-08-27 05:20:06 補充:

    一、看來,你應該還是學生!功課要顧好!我

     高三時,資工教授認定我程式能力在資工大四以上。

     大學不是資工。但並不是班上最會寫程式的! @.@

     不過,最會寫程式的那位同學,最後大學沒畢業!

     別小看學歷這不起眼的東西,對你未來各方面的影響!

     而且,不少程式是靠數學!

     (1960年以前,資工一律只是數學系的一支)

     數學不好,一些漂亮的程式寫不出來!

     不少專門的領域,也全是數學!如:

     CAD, CAE, AI, Graphics, Visualization 等

     所以,學校功課一定要先顧好!

    2008-08-27 05:24:41 補充:

    二、印度人的數學,可謂天下第一!

     印度的月薪很低。據說一般博士的月薪還不到二萬台幣!

     所以,不少軟體代工/外包,都是印度的天下!

     花不到三萬,數學超好的博士,為你賣命寫好!!

     寫軟體很好玩,但

     想靠寫軟體賺錢,要有點心理準備:

     能力、時間、價錢、大環境拚不贏印度時,收入……

    學學程式設計,很好。但不要

     一、忘了學業!

     二、只想靠它賺錢!

    對了,論壇要準備用來寫不同的那篇,在

    http://www.phpbbserver.com/graphicsparalle/viewtop...

    2008-08-27 07:36:18 補充:

    Inunu 果然是老師,高! 佩服!!

    不過,我的程度遠遠不及寫出值得被人 RE 的程式!

    大家一起加油! ^_^

    2008-08-27 10:25:25 補充:

    可以考慮〝改進〞!

    當 BT 有 RE 軟體外流時……

    哇!!救人哪!!

    下次有人問功課時,可以 Post .EXE XD

    2008-08-28 16:03:53 補充:

    9 大,

    你也很強,怎會是無知呢?

    而且,這裡出沒的高手也不少;

    平均能力比我好的也有;

    專門能力也我好的,當然更多。

    你就不用再捧我了。

    2008-08-28 17:08:05 補充:

    贊成 9 大說的:我們只是在討論。

    最多最多,也只有〝指〞戰,絕對不會筆戰的! XD

    啊,糟了!

    要和版大展開〝指〞戰了! :$ :$

    Source(s): 3年前小小研究過 RE、曾是 ASM 高手、20年前做過 RE
  • Inunu
    Lv 5
    1 decade ago

    之前, 老師有沒有在節目上面講, 除非是 Open Source 的 project, 否則你根本就沒有管道取得 C/C++ 的原始碼. 有沒有講? 有講嘛! 更別提要去理解和修正了嘛!

    那這位投資朋友你說要自己改自己用. 你以為這是在辦家家還是頭文字D 在改自家用的 AE86? NO! そんな事ありません!!!

    2008-08-27 07:32:40 補充:

    妥當啊, 當然妥當. 學了你就有基礎了, 到時不妥也得當了啊對不對...

    C 比較單純, 容易快速上手. C++ 則多出許多新的概念和特色, 當然你也可以視需求忽略.

    RE 光是理解就要多花數十倍以上的時間. 一般要熟悉一個內含三十多個 .c, 壓縮完仍有近 MB 的專案原始碼可能得花一個月 full-time. 但用 RE 實在無法想象要多久. 修改或添增功能又得考慮是否破壞相對位址, relocation table 是否重新計算等問題...

    從某角度來看 RE 的技術是用來追隨別人的成就. 如果能夠選擇, 我會希望自己是作品被 RE 的那個.

    2008-08-27 08:04:16 補充:

    RE 這領域對程式技術和各種演算法, 資料結構等理解要求都是毫無疑問的高, 需要理解能力超凡的技術人員, 和大量的心力投資.

    但工作性質不好上檯面 (大部份會直接違反軟體使用授權合約, 公司也可能直接給你斷尾求生...), 而最後的成果又是別人的成果. (當你理解到那個程度時, 自己也有能力開發出相同的技術. 但那打從一開始就是別人的東西了.) 長遠來看實在是不平到吐血的待遇, 因此如果有這門職業, 在薪資上的確需要有所補償.

    2008-08-27 09:03:03 補充:

    Jacob 大你的作品在個人簡介中的論壇上都看得到. 有時還會不惜血本把過去的研究成果和 source 也貼上去分享. 資源這麼豐富怎麼還有人會要去 RE 啦...

    好吧, 看樣子從現在開始逼你只貼執行檔了.

  • SiYu
    Lv 5
    1 decade ago

    要變回原始碼.. 通常很困難. 變ASM 很簡單. 可是ASM 也是一樣困難看的懂.

  • 如果你說的是一般的商業軟体,

    答案是:NO WAY

Still have questions? Get your answers by asking now.