標籤:遊戲破解方面 linux c linux c演算法
0x0:為什麼寫這個系列的文章部落格原本的定位是安卓遊戲的破解,但是為什麼寫這系列的文章呢?
因為在破解過程中,我們是無法避免來寫程式的,恢複演算法,類比演算法,遊戲中對資料的解密,遊戲中對儲存在用戶端金幣的欄位加解密,遊戲中資源檔動態加解密釋放,都離不開我們自己來通過分析之後,自己寫出來代碼。
當然,語言的選擇有很多,常用的為c,c++,python,java,lua,這些都是在遊戲破解過程中所使用過的,我們精通一門語言的編寫是很有必要的,否則,只是單純地看著別人寫的教程,對照著修改遊戲,對技術上來說是沒有任何進步的,只能讓打字,點擊滑鼠更快而已。
十一這幾天,打算靜下心來好好複習下c,因為前些日子自己的電腦重裝系統為Ubuntu了,所以就找了一點linux下的c語言開發的一些知識。
這裡,僅僅是對這幾天學習的簡單記錄,便於以後翻閱,當然,肯定是搜集一些資料來簡單整理和實驗的,並不能說所有東西都是原創,當然自己也沒這本事閉門造車看官方文檔就能寫出來程式了,這裡,感謝所有共用自己學習經驗和學習資料的朋友,有分享,大家才能共同進步!
0x1:準備工作
在linux下,內建了很多編譯器,如gcc,所以我們不需要來找一些軟體配置開發環境了,使用預設的gedit即可,或者使用sublime 2,效果都是不錯的,對一些特殊欄位進行高亮顯示。
0x2:測試代碼的編寫Linux 下面,如果要編譯一個 C 語言來源程式,我們要使用 GNU 的 gcc 編譯器。下面
我們以一個執行個體來說明如何使用 gcc 編譯器。
<span style="font-size:18px;">int main(int argc,char **argv){printf("Hello Linux\n");}</span>
然後輸入 ./hello
gcc 編譯器就會為我們產生一個 hello 的可執行檔.執行./hello 就可以看到程式的輸出結果了.命令列中 gcc 表示我們是用 gcc 來編譯我們的來源程式,-o 選項表示我們要求編譯器給我們輸出的可執行檔名為 hello 而 hello.c 是我們的來源程式檔案。
gcc 編譯器有許多選項,一般來說我們只要知道其中的幾個就夠了。
-o 選項我們已經知道了,表示我們要求輸出的可執行檔名。
-c 選項表示我們只要求編譯器輸出目標代碼,而不必要輸出可執行檔。
-g 選項表示我們要求編譯器在編譯的時候提供我們以後對程式進行調試的資訊。
知道了這三個選項,我們就可以編譯我們自己所寫的簡單的來源程式了,如果你想要知道更多的選項,可以查看 gcc 的協助文檔,那裡有著許多對其它選項的詳細說明。
0x3:Makefile檔案的編寫
如果我們有多個c檔案需要編譯的話,那麼我們一般也就不這樣一行行代碼輸入了,肯定要自己寫一個shell指令碼來編譯,但是如果一個工程有很多檔案需要編譯的花,那麼我們優先選擇的就是編寫一個Makefile檔案,然後執行make命令來進行這項負責的操作即可。
例如我們編寫一些檔案:
那麼我們就編寫對應的檔案:
# 這是上面那個程式的 Makefile 檔案
main:main.o mytool1.o mytool2.o
gcc -o main main.o mytool1.o mytool2.o
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c
有了這個 Makefile 檔案,不過我們什麼時候修改了來源程式當中的什麼檔案,我們只要執行make 命令,我們的編譯器都只會去編譯和我們修改的檔案有關的檔案,其它的檔案她連理都不想去理的。
下面我們學習 Makefile 是如何編寫的。
在 Makefile 中也#開始的行都是注釋行.Makefile 中最重要的是描述檔案的依賴關係的說明.一般的格式是:
target: components
TAB rule
第一行表示的是依賴關係.第二行是規則.
比如說我們上面的那個 Makefile 檔案的第二行main:main.o mytool1.o mytool2.o
表示我們的目標(target)main 的依賴對象(components)是 main.o mytool1.o mytool2.o 當倚賴的對象在目標修改後修改的話,就要去執行規則一行所指定的命令.就象我們的上面那個 Makefile 第三行所說的一樣要執行 gcc -o main main.o mytool1.o mytool2.o
注意規則一行中的 TAB 表示那裡是一個 TAB 鍵
Makefile 有三個非常有用的變數.分別是[email protected],$^,$<代表的意義分別是:
[email protected]目標檔案,$^--所有的依賴檔案,$<--第一個依賴檔案.
如果我們使用上面三個變數,那麼我們可以簡化我們的 Makefile 檔案為:
# 這是簡化後的 Makefile
main:main.o mytool1.o mytool2.o
gcc -o [email protected] $^
main.o:main.c mytool1.h mytool2.h
gcc -c $<
mytool1.o:mytool1.c mytool1.h
gcc -c $<
mytool2.o:mytool2.c mytool2.h
gcc -c $<
經過簡化後我們的 Makefile 是簡單了一點,不過人們有時候還想簡單一點.這裡我們學習一個 Makefile 的預設規則
..c.o:
gcc -c $<
這個規則表示所有的 .o 檔案都是依賴與相應的.c 檔案的.例如 mytool.o 依賴於 mytool.c
這樣 Makefile 還可以變為:
# 這是再一次簡化後的 Makefile
main:main.o mytool1.o mytool2.o
gcc -o [email protected] $^
..c.o:
gcc -c $<
好了,我們的 Makefile 也差不多了,如果想知道更多的關於 Makefile 規則可以查看相應的文檔。
Linux下C編程的學習_1