存的基本单位是字节(BYTE). 每个字节是8个二进制位, 所以每个字节能表示的最大的数是11111111, 即十进制的255. 一般来说, 用十六进制比较方便, 因为每4个二进制位刚好等于1个十六进制位, 11111111b = 0xFF. 内存中的字节是连续存放的, 两个字节构成一个字(WORD), 两个字构成一个双字(DWORD)。
在INTEL架构中, 采用small endian格式, 即在内存中,高位字节在低位字节后面. 举例说明:十六进制数803E7D0C, 每两位是一个字节, 在内存中的形式是: 0C 7D 3E 80.
这里所说的高低位转换 是针对 数值 类型 而言的
在32位寄存器中则是正常形式,如在EAX就是803E7D0C.
/*
当我们的形式地址指向这个数的时候,实际上是指向第一个字节,即0C. 我们可以指定访问长度是字节, 字或者双字. 假设DS:[EDX]指向第一个字节0C:
mov AL, byte ptr DS:[EDX] ;把字节0C存入AL
mov AX, word ptr DS:[EDX] ;把字7D0C存入AX
mov EAX, dword ptr DS:[EDX] ;把双字803E7D0C存入EAX
*/
举例 IDA中dump内存 :
68 66 05 04
这里是有4个字节 是十六进制表现形式
char 字符类型 占一个字节
如果68这个字节 存放的是 char类型
那么它是代表啥呢 怎么转换呢?
这里我用易语言的
字符() 命令来转换
首先把字节 68 十六进制转成 十进制 是 104
再用命令 调试输出(字符(104)) 则是输出 字符 h
又例如 05 如果存放的是 char类型
那么它是这样的 十六进制 转成 十进制 也是 5 再
调试输出(字符(5)&#x