字节 xor加密
1个字节 0~FF 即0~255 即0~11111111
原文件 xor 密钥 = 加密文件
加密文件再次 xor 密钥 = 原文件
32位计算机的内存地址: 0~FF FF FF FF
(FF FF FF FF +1) /1024 /1024/1024 = 4 (GB) 所以32位机的内存容量是4GB XP系统内存就是4G 最大寻址宽度
64位计算机的内存地址:0~FF FF FF FF FF FF FF FF
汇编指令举例
mov eax, dword ptr ds:[0x123abc]
dword 双字 即4字节 0~ FF FF FF FF
ptr 表示是一个地址
ds 表示此地址的内容是一个数据
[0x123abc]自己写地址练习时有一个小技巧,照着ESP 附近的写不会越界
这句话的意思是把 0x1323abc里的值 赋给eax
以上是读的过程
以下是写
mov dword ptr ds:[123abc],87654321
将87654321写入 内存123abc中
以下是把地址读入,而不是把地址内容读入
lea ecx.dword ptr ds:[0x123abc]
以下两种方法是等价的
方法1 mov eax, dword ptr ds:[0x123abc]
方法2 mov ecx, 0x123abc
mov eax, dword ptr ds:[ecx]
在逆向时 我们更多的时候看到的是方法2 而不是方法1直接从数字地址中读取
堆栈 就是一块内存,存储临时变量
栈顶 ESP 栈底 EBP
堆栈对于程序员来说是透明的,对于逆向来讲却是关键的
push和pop只会影响ESP不会影响EBP
代码注入时 经常用mov等变形方式代替push pop,以避开push pop这两个关键字
REP 重复操作 (STOS 将eax的值存储到EDI指定的内存单元中)
mov eax,12345678
mov ecx,2 ecx决定了rep重复的次数
lea edi,dword ptr ss:[esp] 将edi定位到栈顶
rep stos dword ptr es:[edi] stos将会执行两次 并且每执行完一次, edi会自动+4或者-4 取决于D flag位(direction)