内存读写

汇编指令

MOV(移动)

1
2
mov eax,0x1
mov eax,edx//将edx的数值拿到eax里

ADD(加法)

1
add eax,5//将5与eax里面的数值相加放到eax里

SUB(减法)

1
sub eax,5//将5与eax里面的数值相减放到eax里

AND(与运算)

1
2
3
4
5
6
7
mov eax,2
and eax,3//计算2&3的值,结果为2

0010
0011
----
0010

OR(或运算)

1
2
3
4
5
6
7
mov eax,2
or eax,3//计算2|3的值,结果为1

0010
0011
----
0011

XOR(异或运算)

1
2
3
4
5
6
7
mov eax,2
xor eax,3//计算2^3的值,结果为1

0010
0011
----
0001

NOT(非运算)

1
2
3
4
5
6
mov eax,2
not eax//FFFFFFFD

00000002
--------
FFFFFFFD

计算机的位数代表着计算机的寻址宽度,例如32位计算机寻址宽度为4G,每一个内存编号代表一个字节

操作内存

0x12345678这个编号可以代指内存,但是在操作的时候需要区分内存地址和立即数的概念,所以内存地址被[]包围

向这个地址存入一个数,需要指定存多长,有byte,word,dword可供选择

1
2
3
mov dword ptr ds:[0x0022f9b0],0x12345678
mov eax,dword ptr ds:[0x0022f9b0]

image-20230414162509648

image-20230414162535408