飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 460|回复: 1

[原创] 通过游戏学指针系列5:实战理解内存与cpu

[复制链接]

该用户从未签到

发表于 4 天前 | 显示全部楼层 |阅读模式
通过游戏学指针系列5:实战理解内存与cpu
一。什么是汇编
1语言分类:
机器语言:00011111
低级语言:汇编语言
高级语言:c,c++,java,net,php,python,都是高级语言
2什么是机器语言
一串01,编写程序就是靠一串,例如:00000001
3什么是汇编语言
将此串1000100111011000翻译为一句英文
Mov eax,ebx
二.认识一下cpu
实战通过打开某个软件,查看内存和cpu,具体情况:
1将学习软件拖到od
2查看cpu窗口
(1)cpu中存放数据的东东
Eax
Ecx
Edx
Ebx
(2)运算逻辑部件
(3)控制部件
三.认识一下内存
1cpu要工作,那么数据来源于哪里呢,来源于内存
2 指令和数据,没有区别,就是一串01构成的
四.cpu和内存的关系
目标:获取内存地址中某个内容,cpu与内存如何交互
1cpu通过控制线向内存发送命令,说我要读:
2cpu将地址3发送给内存,3是从地址线传过去的
3内存把数据取出来的08,通过数据线,传给cpu
4cpu用一个寄存器eax=08
五.实战:改变内存中某个地址中的内容
1打开odod界面说明:
右上角:cpu窗口
0.png
左下角:内存地址窗口
1.png
左上角:
机器码
2.png
左中:汇编指令
3.png
2command中输入查看内存的命令
db 内存地址:表示以字节方式查看内存
3修改内存地址中对应的内容
双击   修改内存地址中对应的内容
4总结:
内存中全部以字节为最小单位
11为例,这就是一个字节
1     1
0001  0001
最大值是:FF
六.实战二:s=768+12288-1280(实战cpu,内存如何使用)
1. 将三个数转换为16进制,分别为0x3000x3000,0x500
2. 将第一个数放到一个寄存器中、
代码规则:
mov  eax0x3000
mov:固定的,相当于c中的=
eax:从cpu中的寄存器名称中随便取的(但是必须是cpu窗口左上角那一块有8个的,尽量取前4个或者后三个)
0x300:具体的数据
相当于:
int  eax=0x300;
2将另一个数放到另一个寄存器中
mov  ebx,0x3000
3将两个数相加
语法:
Add  第一个数,第二个数
add  eax,ebx
4将上面的eax的结果减去0x500
语法:
sub  eax,ebx:结果同样放到eax
5测试
(1)查看当前灰色背景图,表示程序刚好执行到这儿
(2)F8往下执行一句,此时观察寄存器eax的值
(3)不断按F8看结果
4.png

PYG19周年生日快乐!
  • TA的每日心情
    开心
    2025-1-14 20:41
  • 签到天数: 876 天

    [LV.10]以坛为家III

    发表于 4 天前 | 显示全部楼层
    蹲个沙发~!
    好深奥~!
    谢谢大佬~!
    PYG因为有你更精彩~!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表