[分享] 學作外掛應該熟知的幾個部份

學習製作遊戲外掛,該從哪裡開始?

程式設計基礎:
不管你學得是是什麼語言[0],一般都得由程式結構(Program Structure)、資料型態(Data Type)、流程控制(Flow Control)、檔案 I/O(File Input/Output),學到進階的例外處理(Exception Handle)、自訂函數(Customized Function)、動靜態結構(Structure & Linked-List)、各種搜尋與排序演算法(Searching and Sorting Methods)以及標準二元樹與其變形(Standard Binary Tree and Its Variants),甚至物件導向程式語言(Object Oriented Programming Languages)中的類別(Class)、樣板(Template)、覆載(Overload)、多型(Polymorphism)、STL 容器(Standard Template Library Container)等等,當然最重要的還是「思考邏輯」,關於這方面可以靠練習 ZeroJudge、NPSC、IOI、ACM 程式題庫來訓練與加強!

GDI 程式設計:
其次就是至少知道怎麼製作出以 WinMain() 為入口點(EntryPoint)的視窗程式,並瞭解什麼叫做訊息佇列(Message Queue )與其相關函數的運用,然後就是圖形使用者介面(Graphic User interface),對此你不需要瞭解到足以寫出一個「Painter .NET」的程度,但是「MS Paint」大部分的功能你都要能做得出來,最差也要怎麼用 GetPixel() 或 BitBlt() 去對畫面進行取樣(Sampling ),否則怎麼知道哪裡有「怪物」打,哪裡有「物品」撿?(聽不懂?老兄你別搞笑了!)

記憶體程式設計:
說白了就是行程與執行緒的攔截與處理(Process and Thread Filter and Handle),既然樓主提到「製作加速戰鬥的想法」,你知道絕大多的程式都以軟體實做計時器(Timer)功能嘛?最小時間單位的設定通常以常數的形式隱藏在行程的記憶體領空中,你總不能電腦裝備 2 GB 的 RAM 就把 2*1024*1024*1024 Bytes 的記憶體位址全部搜尋一遍吧?[1]所以你需要學習如何如何列舉與分析作業系統中的行程與執行緒,絕對不需要害怕資源不足,因為這方面的中文資料對岸實在多到爛掉[2]!

網路協定基礎:
寫到這邊只有一句感言:「老實說,大家都覺得 OLG 的外掛最屌!」。這兩天我碰到一個案例,事主在他的問題中提到「如果頭跟尾端的資料不同,那這筆資料傳輸不就會失敗!」,在這裡告訴你:撇開「TCP 的三次交握不談」,就算「UDP 封包傳送錯誤」也會在資料連結層(Data Link Layer)中經由核對查驗和(CheckSum)之後,重新找時間傳送一次,再者有人會認為伺服器會把你交易之後的數據使用「UDP 協定」來作傳送嘛?

網路程式設計:
於瞭解基本的網路協定與運作原理過後,就有能力來學習所謂的 Socket 程式設計(Windows 下稱 Winsock ,而 Unix-Like 下稱 BSD Socket 或簡稱 Socket),需要學習的包括 TCP/UDP Client/Server 的實做,伺從端之間連線怎麼從創設(Socket Establish)到關閉(Socket Close)的過程[3]。

※想寫主機對主機層(Host-to-Host Layer)的網路程式:

不需瞭解:子網域分割(Subnet Partitioning)原理、各種網路拓普(Network Topology)如何布局、應用層(Application Layer)下的諸多協定(除非你研究網頁遊戲外掛,否則不需要懂 HTTP 封包怎麼操作)甚至路由器與閘道器(Router and Gateway)各種的繞徑協定(Routing Protocol)的運作流程[4]。

必須瞭解:開放式互聯網路七層(OSI 7 Layers)、乙太網路架構(Ethernet Architecture)、TCP/UDP 封包格式,最重要的就是網路分析儀(Network Analyzer)的使用,網路上隨便都能找到 Wireshark 的軟體下載與教學說明。

密碼學:
最後,關於密碼學這塊「搞死人不償命的泥淖」,我想不需要初學者去踏足,除了一些商業有在用的金鑰演算法,樓主都沒必要學習如何「實做與破密」,因為網路上有不少包好得函式庫(Library),你只要會寫 Console C/C++ 就知道如何去呼叫(Call)與引入(Import)他們,更何況你已經學了前面這麼多東西[5]?除非作下去之後覺得興趣來了,想研發「驚天動地」的機制或破解「堅若磐石」的算法,藉此幹掉以 RSA、VeriSign 為首的公司我也不能反對,不然真的不需把「離散數學」、「機率論」、「統計原理」或者「數論」吃下去[6],甚至每個演算法都用程式語言寫過!

註解:
0:Win32 熱門語言:VB/C/C++/.NET/Delphi//Perl/Python/Ruby/Java/Lua 等等。
1:不是什麼阿貓阿狗程式碼都可以遍歷整個記憶體領空,因為 Ring0 的領空禁止 Ring3 的程式去存取。
2:不相信?就連成人教育的 Windows 程式設計書籍,都有教你如何寫 DLL 注射與 WDM 程式!
3:希望不要有人家在討論說「怎麼 Bind 到某個 Port 上?」,然後有人在旁邊回「Bind 是什麼東西?」
4:什麼 GGP、EGP、BGP、IGP、RIP、EIGRP、OSRF 等等鬼的,我準備 CISCO 證照時常常看到!
5:這裡排除以「密碼學」為主要研究的人士,但是不排除剛要作這門研究的人!
6:這邊列舉的項目可能有未提及之處,希望 Rock 版主能來作補充!

術語:

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s


%d 位部落客按了讚: