认识易语言变量

计算机一般以两种方式将程序中用到数据存储在内存中,其中一种是变量。可以取不同数值的量称为变量,变是绝对的,没有固定的值,是可以改变的数。

可以把变量理解成一个容纳物品的容器,只是这个变量容纳的是各种可变的数据。变量容纳的数据可以提取,也可以改变。所谓变量,可以理解成一个盒子,变量名就是用来区分是哪一个盒子的,变量的内容就是盒子里的内容。
比如定义了一个 整数变量A,可以理解成有一个名字是A的盒子,而变量A的内容,比如说A=99,那么可以理解成盒子里的内容是99

变量的名称可以任意定义,不过在编程中,应该根据需要给变量定义一个有实际意义的名称,方便程序的开发、维护和互相交流。

定义变量名时要注意:首字符不可以是数字,并且变量名中除了“_”以外,不可以使用其它符号和标点,这些都是为了防止和程序中的数值和符号重复,千万程序的混乱。
变量在程序中的应用非常广泛。变量不但可以用来存放各种类型的数据,还可以作为命令的参数使用,如用于“计次循环首(,)”命令,命令的第二个参数变量会记录循环次数。

1.变量分类

变量从作用范围分三类:
全局变量,程序运行后,所有程序集都可以使用的变量。全局变量程序运行后即占用内存空间,程序结束后才从内存中清除,会较长时间占用系统资源。
程序集变量,仅在本程序集中被调用,若在其它程序集中调用,则需要在变量名前加程序集对应的窗口名称前缀。如:“信息框(_启动窗口.程序集变量,0,)”。
局部变量,只在所在子程序中被调用的变量,只有子程序被调动才占用系统资源,子程序结束,变量所占内存就被系统收回,非常节省系统资源。

2.静态变量

静态变量,是指静止存在的局部变量。当子程序退出时,静态局部变量能够保留现行内容,以供下次继续使用;非静态局部变量,下次进入子程序时将被初始化。

静态变量:就在静止存在的局部变量。当所处子程序退出时,静态局部变量能够保留住现行内容以供下次继续使用;而非静态的变量就不能,下次进入子程序时它将被重新初始化。如果局部变量不设置“静态”属性,子程序执行完毕后,将清空该子程序中的所有非静态局部变量;如果局部变量设置了“静态”属性,当子程序执行完毕后也不会被清空,当子程序再次被调用时,静态变量的值仍保持上次被调用时的状态。

局部变量如果不设置“静态”属性,子程序执行完毕后将清空所有非静态局部变量;局部变量如果设置了“静态”属性,子程序执行完毕后不会被清空,当子程序再次调用时,静态变量仍然保持上次被调用时的状态。静态变量在子程序次被调用时分配内存,在程序结束时销毁。

3.数组变量

数组变量。是指可以存放一组数据的变量。数组变量中的每个成员拥有独立的存储单元,可以单独调用和赋值。数组变量可以看作是多个非数组变量的组合,每个成员由方括号“[]”括住从“1”开始的自然数表示,称为“数组成员下标”。

数组变量:即可以存放一组数据的变量。数组变量中的每个成员都拥有独立的存储单元,可以单独调用和赋值。其实数组变量可以看做是多个非数组变量组成的。

数组变量又分为“单维数组变量”和“多维数组变量”:
单维数组变量的表示形式是:“数组变量名[数组成员下标]”,如:“变量[2]”,表示一个数组中的第2个成员。
多维数组变量可以看作是多个单维变量组合,表示形式是:“数组变量名[数组成员下标][数组成员下标]”如:“变量[1][2]”,表示一个二维数组中第2个成员。

4.变量定义

(1)定义全局变量:用“Ctrl+G”,新建一个全局变量;还可以在易语言“插入”菜单中选择“全局变量”来插入全局变量。
(2)定义程序集变量:将光标停留在编辑区“窗口程序集”中任意位置,按回国键,建立一个程序集变量。
(3)定义局部变量:在子程序处使用“Ctrl+L”,新建一个局部变量;还可以在易语言“插入”菜单中选择“局部变量”来插入局部变量。
(4)定义静态变量:在子程序定义变量的表格中,勾选“静态”下的空格,出现“√”,定义成功,再次单击,“√”消失,取消静态属性。
(5)定义数组:定义一个变量,将变量名称命名为“数组”,然后将光标指向这一行的“数组”,输入要定义的成员数,多维数组成员数,要用逗号隔开。如图:

5.变量赋值

给变量赋值可以使用“赋值()”命令,给数组变量赋值可以使用“连续赋值()”命令;也可以使用等号(=)给变量和数组变量赋值。
给变量或数组变量赋值时,要注意赋给相应的数据类型,否则会出现错误。

6.变量的初始值

变量的初始值即一种变量在程序运行后,没有赋予新值前的初始数据。每一种数据类型的变量初始值都有所不同。像文本型变量的初始值是一个空文本,表示为“”,数值型变量的初始值为 0等等。

变量类型 变量初始值 初始值在代码中的表示方法
数值型 0
逻辑型 假 假
日期时间型 1899年12月30日 [1899年12月30日]
文本型 空文本 “”
字节集型 空字节集 {}

511遇见易语言教程

原文:易语言教程-变量

         511遇见易语言教程

        511遇见易语言教程

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以一个D3D为例子,表现DLL劫持 由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。 利用这种方法取得控制权后,可以对主程序进行补丁。此种方法只对除kernel32.dll、ntdll.dll等核心系统库以外的DLL有效,如网络应用程序的ws2_32.dll、游戏程序中的d3d8.dll,还有大部分应用程序都调用的lpk.dll、sxs.dll,这些DLL都可被劫持。 伪造的dll制作好后,放到程序当前目录下,这样当原程序调用原函数时就调用了伪造的dll的同名函数,进入劫持DLL的代码,处理完毕后,再调用原DLL此函数。 这种补丁技术,对加壳保护的软件很有效,选择挂接的函数最好是在壳中没有被调用的,当挂接函数被执行时,相关的代码已被解压,可以直接补丁了。在有些情况下,必须用计数器统计挂接的函数的调用次数来接近OEP。此方法巧妙地绕过了壳的复杂检测,很适合加壳程序的补丁制作。 一些木马或病毒也会利用DLL劫持技术搞破坏,因此当在应用程序目录下发现系统一些DLL文件存在时,如lpk.dll,应引起注意。 首先 运行exe他会把需要的DLL加载进来,加载的目录如无特别的制定的话,现在当前目录找,然后再去系统目录找 我的附件中自带了一个D3D9的绘图程序,是VC写的 调用的是系统的D3D9.DLL(因为目录下没有) 只解压那个exe文件,是不会有文字出现的 如果把其他的DLL一起解压,就会出现下图文字  hello D3D hook! 那么我们如何劫持了D3D9.dll呢 d3d9_Ex.dll 这个文件其实就是D3D9.dll了,但是我们改名字了,程序就不认识了 我们先用 把D3D9.DLL的输出表找到,弄到易语言里,并且生成D3D9.DLL到目录 这样他调用的就是我们的DLL,但是这样会报错,因为我们的DLL没有内容只是一个壳子 只要我们再把他要调用的函数调用一下不就行了吗 源码中的汇编指令是把函数传递到原来的D3D9。现在的D3D9_Ex里 这样调用就是调用我们的DLL->原来的DLL,中间就可以加些我们需要的代码了

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

511遇见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值