【2022寒假day1】一些基础知识回顾

一些简略的基础知识

《加密与解密》第一章

字节存储顺序

big-endian 高位字节存入低地址,低位字节存入高地址
little-endian 低位字节存入高地址,高位字节存入高地址
例:将12345678h存入从1000h开始的内存中
存放顺序 1000h 1001h 1002h 1003h
big-endian 12h 34h 56h 78h
little-endian 78h 56h 34h 12h

ASCII码和Unicode字符

ascii码一开始只有128个字符,由于计算机以字节为存储单位(8位),故扩展ascii码为256个字符,然后每个ascii码有对应的unicode码,注意字节存储顺序的不同。

Win API

windows api是windows应用程序编程接口(基于c语言的),是应用程序和操作系统最直接的交互方式,起到一个连接调用作用。(win32API函数,wow64子系统,消息机制,虚拟内存)

动态链接库

把经常共用的代码,静态链接的obj程序库制作成dll文件,dll文件本质是PE,通过动态链接减少存储器浪费。
比如:kernel32.dll 控制内存管理,数据输入输出和中断处理;
user32.dll winu用户界面相关应用程序接口
gdi32.dll wins GDI图形用户界面相关程序
这些函数都可以在msdn(微软官方的函数库lib)中查询使用

句柄

使用中唯一的整数值,用来标志应用程序中的不同对象和同类对象中不同的元素,即win用来标志程序中建立或使用的唯一整数。

NT架构

NT架构从内核到动态链接库都是纯32位实现的,统一使用unicode字符集,包含ascii字符集。windows程序的大致框架,从winmain里面进入,会用到一些动态链接库里的参数,winmain在产生一个窗口时,会创建一个窗口类,这个类具有通用性,也有特殊化的性质,调用函数,返回句柄…具体要去拜读Windows程序设计这本圣经才能理清全部细节是如何运作的,可以暂且用高级语言的思想去简单理解。

回调函数

操作系统会call你调用的函数,不占你自己的函数,占用Windows内存,不用每次询问回复询问回复,他具体是如何实现的取决于Windows。

Windows消息机制

系统与应用程序,程序与程序之间的通讯通过消息来触发,有两种消息队列,系统消息队列和应用程序消息队列。Windows本身是由消息驱动的,跟踪消息调试会得到一个相对底层的反馈,比如发生某事件后,系统将事件转变为消息,并将消息投放入消息队列中,程序通过循环函数从消息队列中取出消息,除非消息处理完成,否则函数不会返回,即消息不过是定义一个结构或者id,在程序运行的时候调用switch和case拦截完成相应的功能,比如定义了一个类,就要在winmain中具体化,然后通过截取消息循环完成消息的处理。

Windows保护模式

实模式:程序运行的实质是指令的执行,比如80x86系列使用cs寄存器配合ip寄存器通知cpu指令在内存中你的位置,段地址+偏移地址来定位索引内存。程序指令在执行过程中还需要有各种数据,有不同的寄存器来用于指示不同用途的数据段在内存中你的位置;x86系列使用中断机制来实现系统服务。
保护模式:和实模式差不多,不同的是寻址方式有变。不同任务间的保护,把不同的任务放在不同的虚拟地址空间中实现不同任务间的隔离;同一任务的保护,定义保护级别,将数据代码放在不同你的几倍中,跟印度的种姓制度差不多,其中0级代表最高的权限级别,3级最低,高级权限能访问低级的,反之不行,低级权限能访问和执行的程序数据都是有限的。

虚拟内存

通过映射使可用的虚拟内存达到4GB,用来骗CPU我有这么大内存的。Windows是一个分时多任务操作系统,在一个时间片里面,和程序执行任务无关的东西不会被映射到线性地址中,虚拟内存的实现可通过启动应用程序,将需要的代码读入物理地址时,使用dll,在物理内存中分配其他项目,程序使用其他虚拟地址执行。需要注意几点,程序不能直接访问物理地址,虚拟地址管理器通过虚拟内存访问控制物理地址访问,不同程序4GB的寻址空间相互独立,dll程序没有自己的虚拟空间,动态链接库文件总是被映射到其他程序的地址空间,作为其他程序的一部分运行。

PE格式

可移植执行体,此文件格式是跨win32平台的,任何win32平台的PE装载器都能识别此类型文件,包括NT内核模式驱动程序,研究PE的结构,可以洞悉Windows结构的所有细节。PE文件使用一个平面地址空间,合并代码与数据,可以去了解一下一些常见区块的含义。PE文件在磁盘上的结构与在内存中的结构是一致的,一一映射过去的,加壳通常就是打乱磁盘到内存中的顺序,破壳即还原原来的映射顺序。相关名词解释,入口点:执行的第一行代码地址就是这个值,入口地址;文件偏移地址,PE文件存储在磁盘上时各数据的地址;虚拟地址:内存的偏移地址,即段+偏移量,注意这里的段不同于段地址,而是段选择子,即在不同的系统环境下,这个值可能会不同,一般时相同的,因为我们可以映射过去;基地址:文件执行时被映射到指定内存地址中,这个值是PE文件本身设定的。

小弟学习纪录,各位大佬见笑!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值