?? 菜鳥破解從頭學(全教程).txt
字號:
JE 或JZ 若相等則跳
JNE或JNZ 若不相等則跳
JMP 無條件跳
JB 若小于則跳
JA 若大于則跳
JG 若大于則跳
JGE 若大于等于則跳
JL 若小于則跳
JLE 若小于等于則跳
總的來說,以上幾個,都是比較常見的,需要掌握,但需要掌握的絕不止這幾個,其它的指令希望你能在私下里再了解一下,可以找相應的教程來看。
剛才忘了,現在再把數制轉換也給貼上:
首先說二進制轉換為十進制的問題:
各位二進制數碼乘以與其對應的權之和即為該二進制相對應的十進制數。例如:
10100=2的4次方+2的2次方,也就是十進制數20。
11000=2的4次方+2的3次方,也就是十進制數24。
接著說一下十進制數轉換為二進制數的方法:
這樣的方法到底有多少,我也不清楚,我只講最簡單的一個-除法:
把要轉換的十進制數的整數部分不斷除以2,并記下余數,直到商為0為止。
例:N=34D(說明一下,你可能在某些數字的后邊看到過加有一個字母,這個字母便是用來表示數制的,十進制數用D,二進制數用B,八進制數用O,十六進制數用H)
34/2=17 (a0=0)
17/2=8 (a1=1)
8/2=4 (a2=0)
4/2=2 (a3=0)
2/2=1 (a4=0)
1/2=0 (a5=1)
所以N=34D=100010B。
對于被轉換的十進制數的小數部分則應不斷乘以2,并記下其整數部分,直到結果的小數部分為0為止。
十六進制數與二進制數、十進制數之間的轉換:
總的來說,十六進制數與二進數之間的轉換,應該算是很簡單的了,你只需把與之相對應的數值進行轉換就成了。
十六進制數的基數是16,共有16個數碼,它們是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中A表示十進制中的10,其余類推。它們與二進制和十進制數的關系如下:
0H=0D=0000B,1H=1D=0001B,2H=2D=0010B,3H=3D=0011B,4H=4D=0100B,5H=5D=0101B,6H=6D=0110B,7H=7D=0111B,8H=8D=1000B,9H=9D=1001B,AH=10D=1010B,BH=11D=1011B,CH=12D=1100B,DH=13D=1101B,EH=14D=1110B,FH=15D=1111B
所以,二進制與十六進制之間要進行轉換的話,只要把它們由低到高每四位組成一級,直接用十六進制來表示就可以了:
例: 1000 1010 0011 0101
8 A 3 5
十六進制轉二進制則用只需將每一位用四位二進制數來表示就成了:
例: A B 1 0
1010 1011 0001 0000
最后是十六進制數與十進制數之間的互相轉換
十六進制數轉十進制數
各位十六進制數與其對應權值的乘積之和即為與此十六進制數相對應的十進制數。
例:N=BF3CH
=11*16的3次方+15*16的2次方+3*16的1次方+12*16的0次方
=11*4096+15*256+3*16+12*1
=48956D
十進制轉十六進制
我還是只講最簡單的除法:
把要轉換的十進制數的整數值部分不斷除以16,并記下余數,直到商為0為止。
例N=48956D
48956/16=3059 (a0=12)
3059/16=191 (a1=3)
191/16=11 (a2=15)
11/16=0 (a3=11)
所以N=48956D=BF3CH。
通過以上的介紹,我不知道你到底看懂沒有,如果有的話,請你去看一下書本,把我沒講到的地方和講過了的地方都仔細地看幾遍。如果你根本就沒有看懂,那么你就更需要去看書了,不要因為這就喪失掉學習的信心。你認真地把前邊兒的CPU介紹看完,弄清楚寄存器的概念,再把后邊匯編指令拿下,就可以上路了。你認真學,認真背的話,會發現其實并沒你想像中的那么難。一星期的時間,就可大概掌握了,但只是掌握而已,最起碼可以看懂匯編代碼了。要真想學好的話,就連后邊兒的也一同看了吧,再寫一些小程序來練練手。當然想精通匯編,那可不是一天兩天一月兩月的事,但你只要有恒心,有什么搞不定的?CPU也是人做的,指令只是其中的一部分而已,人家能做出CPU,你還怕連使用都學不會?
課后FAQ
Q:我以前學過8086/8088,并且也在DOS下寫過程序,能行嗎?
A:絕對能行,相對8086/8088,現在的CPU在基本指令方面,也沒有添加多少新的指令。你只需了解一下各寄存器的變化以及補充一下Windows程序的知識就成了。而且,既然你用匯編在DOS下寫過程序,那么對Debug等調試器,肯定已經很上手了,所以你有先天的優勢。
Q:匯編對我來說不成問題,可我為什么總是不上手呢?
A:呵呵,這樣的老鳥倒還有不少,他們把匯編用的相當熟練,但是,只是因為經驗的原因,所以才覺的不上手的,許多人當初不也都這樣嗎?最起碼我就是,見了CALL就跟進,呵呵,倒跟了不少API,所以對于這部分高手,你只需多練練手以及掌握一些分析的技巧就成了。
Q:我沒學過編程,能學匯編嗎?
A:總的來說,也行。不過希望匯編的學習,不會使你丟掉學習其它高級語言的信心。:)
答網友問
Q:寄存器可以隨便用么,有沒有什么限制?寫個程序的時候那些變量什么的可以放在任意的寄存器么?
A:呵呵,我現在就來回答樓上朋友的問題。
寄存器有它的使用機制,及各個寄存器都有著明確的分工。
如小翠兒 如數據寄存器(EAX-EDX),它們都是通用寄存器,及在軟件中,任何數據都可存放于此。但是除此之外,它們又可以都可以用于各自的專用目的。
例如:
EAX可以作為累加器來使用,所以它是算術運算的主要寄存器。在乘除法等指令中指定用來存放操作數。比如在乘法中,你可以用AL或AX或EAX來裝被乘數,而AX或DX:AX或EAX或EDX:EAX則用來裝最后的積。
EBX一般在計算存儲器地址時,它經常用作基址寄存器。
ECX則常用來保存計數值,如在移位指令它用來裝位移量、循環和串處理指令中作隱含的計數器。
最后就剩下四大天王中的黎明了,近一段時間來,他總是比較低調...(你別打我了,我去撞墻好了)最后就剩下EDX了,一般在作雙字長運算時把DX和AX組在一起存放一個雙字長數(你還記的什么是雙字長吧,舉個例子,比如說有一個數二進制數據01101000110101000100100111010001,你要把它寄存起來,就可以把0110100011010100(即高十六位)放在DX中,把0100100111010001(即低十六位)放在AX中,這個數表示為DX:AX)當然完全可以用一個EDX就把這個數給裝下。所以,還可以用EDX:EAX來裝一個64位數據,這個你會推斷出來吧。
而ESP、EBP、EDI、ESI,我上邊兒以經大概介紹的差不多了,所以這里不說它們了。
當然還有其它的一些限制,因為我們只是要看程序的匯編代碼(人家寫好了的,肯定不會犯錯誤吧),而不是要去寫,所以可以不必掌握。有性趣的話,去看相關書籍。
另外再說一下你的最后一個問題“寫個程序的時候那些變量什么的可以放在任意的寄存器么? ”這句話我不明白你要問的是什么。我想你可能是把一些關點給搞錯了,變量這詞通常都是出現在高級語言中的,而你用高級語言寫程序的話,完全不用理解那些寄存器什么的,這些都跟高級語言沒什么關系。但是最終,高級語言也還是把你寫的程序轉換為對寄存器、內部存儲器的操作。
<本章完>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三章—Windows程序
這一章我都不知道該如何寫了,呵呵~~
畢竟,Win32是一個非常深奧的系統,目前還容不得我這種小輩在這兒說三道四,不過,我既然是要寫給那些入門階段的朋友們看的,又不是寫給那些搞程序設計老鳥看的,所以,我也犯不著怕被人背后指著罵 本章的名字就叫《Windows程序》而不是《Windows程序設計》所以,我只是講一些關于Windows程序運作的原理:
Windows為什么叫Windows,相信所有用過的朋友都可以明白,那桌面上一個一個的窗口,就是它名字的由來。也就是這一個又一個窗口的出現,使計算機的使用一下子簡單了巨多。幾年前接觸過電腦的朋友一定知道DOS吧,不知道的話,去問加解密工具下載版的版主老哥,讓他跟你解釋 你還記的DOS下那黑乎乎的窗口吧,沒見過的哥們兒可以在開始菜單中找出來看看。DOS通過一系列的命令來進行相應的操作,如進入一個目錄,刪除一個目錄等等等等。那種工作方式就叫做命令提示符方式,也即命令行。
現在國內不懂電腦的人還老愛說要想學電腦,必須要英語過關。(就是這個,嚇跑了多少僅僅是想學習一些基本操作的朋友)可能也就是源自DOS的原因吧。
后來,隨著硬件的支持以及技術上的提高,當然還有為了使電腦更方便的服務與人,慢慢的就有了所謂的視圖操作系統,從此,你不用再記憶那些大堆的指令了,而且操作上,也有了相大的提高,可以說操作系統發展到今天的份兒上,操作已經夠簡單了,去看看那些在網吧里一把鼻涕的小孩子們吧…
當然,就像當年DOS之于命令提示行一樣,今天的Windows仍和當年一樣,占據著大部分的用戶群。
(場外:一觀眾扔來一爛柿餅,你是唐僧啊,這么多廢話)
馬上轉入正題,Windows之所以好用,除了不用背N多的命令外,一個原因就是因為它本身提供了大量的標準Windows GUI函數。所以對于用戶,面對的是同一套標準的窗口,對這些窗口的操作都是一樣的,所以使用不同的應用程序時無須重新學習操作。不用像當年在DOS下面那樣一安裝新程序,就要馬上看幫助,看說明。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -