第二十七课(深入内存) 概述:本节课主要讲了,到字节集、取字节集数据、Lstrcpyn取整数型数据的内存地址,先通过演示程序讲解了用CE怎么添加变量的内存地址,然后通过把99999转换成字节集,搭配CE讲解了到字节集()、取字节集数据()、取十六进制文本(),最后通过“易用API伴侣”和“msdn”讲解了Lstrcpyn、传址的概念,Lstrcpyn主要是用于取整数型数据的内存地址。 用到的工具:易语言编程工具、第二十五课\ Cheat Engine 7.0单文件版.exe、第六课\易用API伴侣绿色版\EApi.exe、第六课的msdn library visual studio 6.0 CE怎么添加变量的内存地址:已知一个变量的内存地址,怎么把这个内存地址放到CE上面使用。点CE左上角“小电脑”,找到想要查找的进程,点击右下角的“手动添加地址“,在”添加地址“窗口的”地址输入框“里面输入已知的内存地址点击确定,然后在自己的程序上面变动一下该内存地址所对应的数值,如果CE上面的内存地址也跟着数值变化,可以猜测这就是存放相应数值的地址,也就是说这个内存地址是正确的。 到字节集:就是把一段文本型或者整数型的数据,转换成四字节来显示或者操作,转换之后的格式可能是4{1,0,0,0},其中的4就代表是四字节的意思。 取字节集数据:取字节集数据(到字节集(a),3,),就是把一段字节集数据还原成原来的文本,第一个参数就是一段字节集,第二个参数就是这段字节集原来的数据类型,如果是这段字节集原来的数据类型是整数型,第二个参数就写3,原来是文本型的话就写1。 取十六进制文本:取十六进制文本(159)就是9F,十进制的159转换成十六进制就是9F。 Lstrcpyn():通过msdn了解到,它返回的是一个长的文本型指针,这个函数是干嘛用的呢?它这个函数原本是将一段字符串保存在(赋值到)一个内存地址中,不过呢这个函数一般是没有用的,它的返回值很有意思,它的返回值就是返回的是一个保存一个变量的缓存区的指针,简单的说呢就是说,把这个变量保存在内存中的一个内存地址,而且呢它的返回值是一个指针。它的返回值是一个整数型,它返回的是一个缓存区的一个指针,它是个整数型。但是呢这个函数很奇怪,它返回给你的呢并不是成功失败,它返回的给你的呢却是这个一个缓存区的指针,也就是保存这个a的变量的这个内存地址,这时返回的呢是一个整数型,我们把这个整数型的这样的一个的数据呢,转换成文本型呢给它保存在这个编辑框2的内容里面,这个整数型是十进制的,想放到CE里面用的话,需要把这个十进制的整数转换成十六进制的。它原本的呢它是把一段文本型的一段内容呢存放到某一个缓存区里面,但是它返回的呢就是这个变量的一个内存地址,也就是缓存区的一个指针。第一个参数lpString1也是一个长文本型指针,应该是整数型也是可以的。是一个缓存区的一个指针,也就是保存变量的一个内存地址。就是要查看的一个变量的变量名,这个变量我觉得可以应该是任何一个数据类型都是可以的,它msdn和易用API上都是写的文本型,咱们的源码写的是整数型。第二个参数lpString2也是一个长文本型指针,应该是整数型也是可以的。就是欲拷贝的数据,这边可以不填,也可以填a,也就是说你把a的值呢又放到了保存a的那个变量里面去。第三个参数iMaxLength是一个整数型,这个是要拷贝的一个字节一个长度。 “传址“是什么意思呢:其实它的意思是传递一个变量的一个内存地址,如果你不打勾呢,它仅仅是传递的呢是一个变量的值,如果你打上勾呢,那它传递的呢就是一个变量的一个内存地址。我们如果点上传址以后呢,这个DLL外部的一些函数呢可能会对这个指针里面写入一些值,可能就是说你这个参数赋给它以后呢,它把你这个值呢可能会改变,如果你不打勾呢,你直接传递的呢就是一个值,而不是一个地址,你原先传过去一个值呢,那后来也是一个什么值,也是那个值,所以呢我们这边呢一定要打一个勾。如果你不打勾呢,(第一个参数lpString1)这个呢是变量名,它仅仅是把变量的内容呢传递给了这个函数(lstrcpynA),如果你打上勾呢,它就是把存放你这个变量的那个地址呢传递给了它(lstrcpynA)。
觅风易语言教程第二十七课(深入内存)课件源码笔记工具下载:
|