彙編 從資料型別看WORD與DWORD

2021-08-30 21:49:52 字數 2035 閱讀 3006

剛接觸彙編與逆向,記錄一些學習筆記。

源**:

ida彙編**:

首先 1字=2位元組  1位元組=8位(8位元)=2位16進製制

var_6=dword ptr -6

ptr-6表示指標上移6個單位處,這裡的單位是指計算機的定址單位,一般按位元組定址,[ebp+var_6]就表示ebp-6個位元組的位址處。

dword 表示雙字,是對存入資料的說明。雙字=4位元組,也就是8位16進製制,也就是32位元(二進位制)。

mov [ebp+var_6] eax(eax的值為0x00000000,eax為32位暫存器)表示的就是將0以雙字(4位元組)形式存入ebp-6位址處。雙字形式的0也就是8位16進製制的0,32位位元的0。那將占用實際位址幾位呢?這裡牽扯到計算機的定址方式。一般以位元組進行定址,乙個位元組2位16進製制。也就是說乙個位址單元只能存8位元。

那mov [ebp+var_6] eax要存32位元,就存在了ebp-6,ebp-5,ebp-4,ebp-3四個位址單元上了。

var_2=word ptr -2

ptr-2表示指標上移2個單位處,這裡的單位同樣是位元組,[ebp+var_2]就表示ebp-2位元組處。這裡和dword是一樣的。

word 表示單字=2位元組=16位元,是對存入資料的要求,也就是16位元。

mov [ebp+var_2] ax 表示的是將0以單位元組的形式存入ebp-2位址處,ax是取eax的低16位。符合word(單字)的要求。

根據之前說的按位元組(4位16進製制=16位元)為單位定址,ax的值存入ebp-2和ebp-1處,這兩個位址單元。

short[4]=[100,]的生成

short型長度為2位元組,佔16位。彙編**中的執行過程為:首先存入16位的0x64(100),即short[0],再存入32位的(0x00),實際上是兩個16位的0x00,即short[1]=0,short[2]=0,最後通過ax暫存器存入16位的0x00,即short[3]=0.

因此彙編**中表面上只有兩步賦0操作。

od中動態觀察:

初始狀態:

存入1字word(雙位元組)的0x64

存入雙字dword(4位元組=8位16進製制)的0x00,賦值short[1]和short[2]

存入單字(雙位元組=4位16進製制)的0x00,short[3]=0

double型

double型佔8位元組(64位),在記憶體位址中佔8個單位。是分兩次存入的,一次賦值4個位元組的內容。之後的賦0操作略有不同,是通過乙個迴圈實現的。

ecx=6表示迴圈6次,xor eax eax 將eax初始化為0從[ebp+var_50]開始向下迴圈6次,每次存入32為的0x00(eax為32位)即4位元組,共24位元組的0,即為3個double型的0,。賦值完畢。

文章同步到我的部落格

Python 回頭看 資料型別

mark學程式設計 先說題目,回頭看是 世界中都知曉的名詞。我們這裡借用,表達對學過的python知識,進一步梳理的意思。今天梳理資料型別,或者確切的說,梳理資料型別中除了我們剛剛學習的列表,元組,字典,集合 還沒有學習 外,另外幾個與int,float,str 相關的相對複雜的型別。我們梳理pyt...

PoEdu 反彙編003 資料型別

c c 語言中,資料型別有很多,常用的 int long short char以及他們的unsigned型。我們熟知,int long都是占用32位 4位元組 short佔16位 2位元組 int和long的範圍為0x00000000 0x7fffffff 0x80000000 0xffffffff...

彙編中基本的資料型別

1 位元組 db define byte 乙個位元組有8位二進位制組成,其最高位是第7位,最低位是第0位。在表示有符號數時,最高位就是符號位。00001001 9 10001011 11 有符號 139 無符號 通常情況下,儲存器按位元組編址,讀寫儲存器的最小資訊單位就是乙個位元組。var byte...