170403 汇编-位运算和地址表示,逆向-winapi和系统相关基础

来源:互联网 发布:2016网络写手收入排行 编辑:程序博客网 时间:2024/05/02 00:58

1625-5 王子昂 总结《2017年4月3日》 【连续第184天总结】

A.汇编第七章 50%

加密与解密第一章100%

B.更灵活的定位内存地址的方法:

and:取交位运算,可以将寄存器的值的某一位设为0,其他位不变

or:取并位运算,可以将寄存器的值的某一位设为1,其他位不变

eg:

mov al,01100011B

and al,10111111B

//可以使al寄存器中的值的第二位变为0

汇编语言中也是使用ASCII码的方式来存储字符,使用单引号''表示字符形式数据,编译器会自动将其转换为对应的ASCII码值

[bx]可以表示一个内存单元的内容,在汇编中还可以直接对bx进行加减,即[bx+i]

eg:mov ax,[bx+200] //将段地址为ds,偏移地址为bx+200的内存单元的内容送入ax寄存器中

还有别的表示方法:

mov ax,200[bx]

mov ax,[bx].200

200[bx]与C语言中的数组a[i]可以说一致:200和a表示一个数组的起始地址,[bx]和[i]表示第几个元素,即相对起始地址的偏移地址


windows API

Windows操作系统里提供的接口称作Win API,实际上开发者接触的都是WinAPI,更底层的东西都是透明的

Win32对Win16兼容,将Win16通过一个转换层转换为Win32函数调用

而调试器如OllyDbg可以针对API函数设置断点的功能,因此需要掌握一些常用API:

hmemcpy将内存中的一块数据拷贝到另一个地方

GetWindowText取得一个窗体的标题文字,或者一个文本控件的内容

GetDlgItem获取指定对话框的句柄

GetDlgItemInt获取对话框整数值

MessageBox创建和显示消息框

Windows是一个消息驱动式系统,Windows消息提供应用程序与应用程序之间、应用程序与Windows系统之间进行的通信的手段。应用程序想要实现的功能由消息来触发,然后靠对消息的响应和处理来完成。

Windows系统中有两种消息队列:一种是系统消息队列,另一种是应用程序消息队列。

当一个时间发生时,系统先将输入的消息放入系统消息队列中,再将输入的消息拷贝到相应的应用程序队列中,消息循环从它的消息队列中检索每个消息并且发送给相应的窗口函数中。一个事件的发生,到达处理它的窗口函数必须经历上述过程。

常用的消息函数有:

SendMessage:调用一个窗口的窗口函数,将一条消息发给该窗口。处理完后返回

WM_COMMAND当用户从菜单或按钮中选择一条命令或者一个控件时发送给它的父窗口,或者当一个快捷键被释放时发送。

WM_DESTROY当一个窗口被破坏时发送。

WM_GETTEXT应用程序发送一条消息,将一个对应窗口的文本拷贝到一个呼叫程序提供的缓冲区中。

WM_QUIT当应用程序调用PostQuitMessage函数时生成消息WM_QUIT

WM_LBUTTONDOWN当光标在一个窗口的客户区单击时,该消息被发送。如果鼠标动作未被捕获,这条消息被发送给光标下的窗口,否则被发送给已经捕获鼠标动作的窗口。

现在使用的CPU可在实模式、保护模式和虚拟86模式3中模式下运行。目前一般使用在保护模式下:寻址方式与实模式的段地址+偏移地址不同。段寄存器中存放着段选择子,段描述符寄存器中则存放着段的基地址、属性(特权级)和界限。

虚拟内存的原理:当一个程序被启动时,系统就创建一个新进程,然后为其分配2GB的虚拟地址(不是内存)。虚拟内存管理器将程序和需要的动态链接库DLL映射到虚拟地址中。在需要的时候,虚拟内存管理器将虚拟地址中的内容读取到物理地址中。以此来实现内存的扩充。

在保护模式下,所有应用程序都有全线级别。分别为0-3,其中3最低,0最高。

核心态(Ring 0)运行硬件抽象层、设备驱动和内存、进程等管理

用户态(Ring 3)运行动态链接库和系统,提供对应用程序的接口

应用程序运行在最低权限的3级,因此只能规矩地使用系统提供的API接口,而不能直接对系统操作。

如想控制系统,就必须取得0特权级

Window的可执行文件是PE格式:

PE文件使用的是一个平面地址空间,所有代码和数据都被合并在一起。文件的内容被分割为不同的区块,每个块都有它自己在内存中的一套属性。

每一个区块都有不同的名字,这个名字用来表示区块的功能。

常见的块有:

.text在编译或汇编结束时产生的一种块,它的内容全是指令代码

.rdata运行期只读数据

.data初始化的数据块

.idata包含其他外来DLL的函数及数据信息,即输入表

.rsrc包含模块的全部资源,如图标、菜单、位图等

PE文件非常好的一个地方就是磁盘上的数据结构与内存中是一致的。装载一个可执行文件到内存中,主要就是将一个PE文件的某一部分映射到地址空间中。

入口点:执行的第一行代码的地址

文件偏移地址:当PE文件储存在磁盘上时, 各数据的地址称作文件偏移地址。从第一个字节开始计数,起始值为0

虚拟地址:由于Windows使用保护模式,所以程序访问存储器所使用的逻辑地址称为虚拟地址,又称为内存偏移地址,与实模式下的分段地址类似,形如段:偏移量的形式。(这里的段是指段选择子)

基地址:文件执行时将被映射到指定内存地址中,这个初始内存地址称为基地址。按照默认设置,用VC++建立的EXE文件基地址是00400000h,DLL文件基地址是10000000h。但是可以在创建应用程序的EXE文件时改变这个地址,通过连接应用时使用链接程序的/BASE选项。

C.明日计划

PyQtTabWidget和界面设计

汇编

0 0
原创粉丝点击