初識彙編
彙編
計算機語言
- 計算機是個傻子,只認識0和1,它沒有思考,只是按照我們輸入的01跑
- 最早的程式設計人員,用著穿孔卡帶和計算機交流。
- 一串一串的01,讓我們怎麼也記不住。
- 助記符的產生,是那麼的合理。
- 這些助記符就是組合語言了,一般用於底層,微控制器的編寫
加:INC
減:DEC
乘:MUL
除:DIV
加密程式:使用自己定義的進位制:進位制的加密
無論什麼進位制,本身都是有一套完美的運算體系,我們都可以通過列表的方式將他們計算出來
暫存器、記憶體、位!底層的每一位都有含義。
資料寬度
計算機:記憶體!給資料增加寬度
- bit:1位
- Byte:8位
- Word:16位
- DWord:32位
C、C++、java都需要定義資料型別,計算機底層需要我們給這些資料定義寬度
- 位 :0 1
- 位元組:0-0xff
- 字:0-0xffff
- 雙字:0-0xffffffff
在計算機中,每一個資料都要定義型別,給它定義寬度,在記憶體中的寬度
- 無符號數:都是數
- 有符號數:最高位是符號位1(負數)、0(正數)
位運算
計算機可以儲存所有的數字
- 與(and,&):同為1才為1
- 或(or,|):有一個1取1
- 非(not,!):取反,單目運算子
- 異或(xor,^):不相同則為1
- 左移(shl,<<):高位丟棄,所有位左移
- 右移(shr,>>):地位丟棄,高位根據符號位補相同位
位運算實現加減乘除
基本數學都是建立在加減乘除上
- 計算機內部計算加法的過程
4+5=?
0000 0100
0000 0101
----------(加法,計算機不會加法)
0000 1001
# 計算機只會與或非異或,把加法轉換為位運算
# 第一步:異或運算(如果不考慮進位,這裡就實現了)
0000 0100
0000 0101
----------(異或)
0000 0001
# 第二步:與運算(判斷進位,有進位則為1)
0000 0100
0000 0101
-----------(與)
0000 0100
# 第三步:進位左移(將進位數字與對應位對齊)
0000 0100
-----------(左移)
0000 1000
# 第四步:異或(將進位數字與加法數字異或得到結果)
0000 0001
0000 1000
-----------(異或)
0000 1001
# 第五步:與運算(判斷加進位後有沒有再進位)
0000 0001
0000 1000
----------(與)
0000 0000
# 如果不為0重複上述過程,最終結果為與運算為0的結果
彙編
- OD介面:
暫存器
儲存資料:CPU>記憶體>硬碟
通用暫存器 :可以儲存任何的值
- 32位的通用暫存器只有8個
- 存值範圍:0-FFFFFFFF
- 計算機向暫存器中存值:對於二進位制來說,直接存值,彙編中用mov指令(mov 地址 資料/地址)
- 暫存器在不同位數計算機中對應的名稱
記憶體
- 暫存器很小,不夠用。所以資料要放到記憶體
- 每個程式都有4G的記憶體空間
- 程式真正執行的時候才會用到實體記憶體
1B = 8bit
1kB = 1024B
1MB = 1024kB
1G = 1024MB
計算機中記憶體地址很多,空間很大。
== 記憶體地址==:
- 給每個空間分配一個地址
- 32位是8個16進位制的值
- 32位定址能力是4G
記憶體地址:
- 往記憶體中寫東西:不是任意地址都可以寫東西,要申請使用,只有程式申請過的記憶體地址我們才能使用
# 使用匯編忘記憶體中寫入資料
mov 資料寬度 記憶體地址,資料
mov byte/word/dword/qword ptr ds:[0019FF74],1
# ptr ds:[0019FF74]:記憶體地址的一種固定寫法
# 傳遞的值達大小一定要和資料寬度相等
記憶體地址有很多寫法:
- ds:[0019FF74]:直接寫地址
- ds:[0019FF74+4]:記憶體地址偏移
- ds:[eax]:寫暫存器地址
- ds:[eax+4]:暫存器偏移
- 陣列[]:
- ds:p[reg+reg*{1,2,4,8}]
- ds:p[reg+reg*{1,2,4,8}+4]:偏移
相關文章
- iOS逆向學習筆記 - 彙編(一) - 初識彙編iOS筆記
- 初識彙編-第一篇
- 彙編初識與計算機組成計算機
- storm 初識編碼ORM
- 【自用】彙編初學筆記 #1筆記
- 10.4 認識Capstone反彙編引擎
- Python初學者的29個知識難點彙總Python
- 彙編
- 彙編必知小知識點及常用debug命令
- Jack整理的Win32彙編基礎知識Win32
- nasm彙編ASM
- 彙編命令A
- 彙編基礎
- linux彙編指令Linux
- 手撕彙編。。。
- ARM彙編指令集彙總
- iOS逆向之旅(基礎篇) — 彙編(一)— 彙編基礎iOS
- 初識 “HTML”HTML
- 初識GolangGolang
- 初識jQueryjQuery
- Nodejs初識NodeJS
- Express初識Express
- 初識GitGit
- 初識JSJS
- CDN初識
- 初識VueVue
- webpack初識Web
- 初識HIVEHive
- 初識TcpTCP
- 初識HTTPHTTP
- 初識ARKit
- 初識HaphoopOOP
- 初識PostgreSqlSQL
- AsterixDB初識AST
- 初識Fink
- 初識WebWeb
- 初識 Shell
- 初識 reduxRedux