Detours 代碼倉庫: https://github.com/microsoft/Detours x64寫一個任意地址hook要比x86麻煩的多,所以這裡直接封裝框架來用於x64的hook。 Detours是微軟發佈的一個API hook框架,同時支持x86和x64,看文檔說也支持ARM和ARM ...
運算符--原碼、反碼、補碼
原碼:
十進位數據的二進位表現形式,最左邊是符號位,0為正,1為負。
利用原碼對正數進行計算是不會有問題的。
但如果是負數計算,結果就出錯,實際運算的結果,跟我們預期的結果是相反的。
原碼的弊端:
- 利用原碼進行計算的時候,如果是正數完全沒有問題。
- 但是如果是負數計算,結果就出錯,實際運算的方向,跟正確的運算方向是相反的。
反碼:
出現的目的:為解決原碼不能計算負數的問題而出現的。
計算規則:正數的反碼不變,負數的反碼在原碼的基礎上,符號位不變,數值取反,0變1,1變0。
反碼的弊端:負數運算的時候,如果結果不跨0,跟實際結果會有1的偏差。
補碼:
出現的目的:為瞭解決負數計算時跨0的問題而出現的。
計算規則:
- 正數的補碼不變,負數的補碼在反碼的基礎上+1.
- 另外補碼還能多記錄一個特殊的值-128,該數據在1個位元組下,沒有原碼和反碼。
註意點:電腦中的存儲和計算都是以補碼的形式進行的。
基本數據類型
數據類型 | 位元組 | 二進位 |
---|---|---|
byte類型的10 | 1個位元組 | 0000 1010 |
short類型的10 | 2個位元組 | 0000 0000 0000 1010 |
int類型的10 | 4個位元組 | 0000 0000 0000 0000 0000 0000 0000 1010 |
long類型的10 | 8個位元組 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1010 |
隱式轉換
public class Test {
public static void main(String[] args) {
byet a = 10;//0000 1010
int b = a;//0000 0000 0000 0000 0000 0000 0000 1010
System.out.println(b);
}
}
強制轉換
public class Test {
public static void main(String[] args) {
int a = 300;//0000 0000 0000 0000 0000 0001 0010 1100
byet b = (byet) a;//0010 1100
System.out.println(b);//44
}
}
public class Test {
public static void main(String[] args) {
int a = 200;//0000 0000 0000 0000 0000 0000 1100 1000
byet b = (byet) a;//1100 1000
System.out.println(b);//-56
}
}
其他運算符
運算符 | 含義 | 運算規則 |
---|---|---|
& | 邏輯與 | 0為false,1為true |
| | 邏輯或 | 0為false,1為true |
<< | 左移 | 向左移動,地位補0 |
>> | 右移 | 向右移動,高位補0或1 |
>>> | 無符號右移 | 向右移動,高位補0 |