易语言置入代码

易语言置入代码

速度及完成一些易不好直接完成的操作,是追求置入代码的全部!如果你不同意,那基本上不用往下看。汇编功底只有靠自己,这里只是讲述在易语言中如何使用“置入代码()”来嵌入汇编及其注意要点。这是自己的学习体会,如有理解错误或bug请指出,谢!

我们先来了解一下置入代码是怎么的一回事

汇编中nop是空操作指令,我们先使用8个空操作来给程序作个“置入代码”的标记。于是,在一个新建易程序中输入如下代码:

静态编译成可执行文件后,使用OllyDbg反编译一下:

PUSH EBP / MOV EBP,ESP 是例行的保存和设置 EBP 的代码,因为缺省对堆栈操作的寄存器有 ESP 和 EBP,而 ESP是堆栈指针,无法暂借使用(代码中若有 PUSH/POP指令会自动修改ESP值),所以一般使用 EBP 来存取堆栈。聪明的你在这时有没有想发言:“但我们置入代码中没有添加这个指令,它是如何来的?”告诉大家,这是易编译器添加上去的。易语言为所有子程序初始都添加这么的两句,在“返回()”时再使用MOV ESP,EBP/POP EBP 来平栈,这都是易语言在编译时所做的处理,平常我们都不用关心这些。但当使用置入代码来嵌入汇编指令,我们就不得不了解。现暂且放下,后面再来说明我们要了解的的东西。

跳出具体指令,看看反汇编子程序的框架。置入的代码(8个nop)“完全”的位于一个子程序内。对此应了解:我们置入代码()严格来说是置入汇编代码“片段”。不要希求能置入一个完整pe数据,易语言会在编译链接时写入易的文件头。置入代码()就不能再使用.data或invoke messagebox之类。因为易语言不会再为我们置入的代码去修改数据段及导入表。

辅助工具的选用

作为铺垫,我们先来了解一下易语言置入代码汇编工具。云外归鸟(大鸟)提供了一个功能完善、界面友好、使用免费的工具“易语言置入代码NASM汇编生成工具v1.0?”

NASM指令简单明了,而且能将汇编代码片段直接编译成二进制文件,它不强求源码是一个完整的汇编程序。这也可能是大鸟选择使用NASM编译器的原因(个人猜想)。大鸟在易语言论坛提供了该工具的源码下载。在此感谢大鸟为广大易友所做的贡献!

相信使用汇编的人更多的是喜欢MASM,这从Aogo所写“MASMPLUS”被广泛下载使用可见一斑。本人在大鸟提供源码的前提下修改了小部分代码,让该工具支持MASM编译。若大鸟认为被侵权,请指出,本人QQ:109544089。本人当即删除下载链接及正式致歉!

MASM不支持直接编译成二进制文件,这当中要如何处理?答案是:链接成COM文件。因为DOS中COM文件是没有文件头,系统载入后直接从第一个语句运行。这提供了一个迂回办法来生成置入代码所需字节集数据。这样一来,我们就必须定义一个完整的汇编源码去编译链接,这就是为什么在易语言置入代码MASM汇编工具当中存在.586、.model、option等这样的几行语句,而在NASM汇编工具中没有的原因了。这教程均使用MASM汇编置入工具,请大家下载配合教程使用。下载地址:/read.php?tid=271694

提供一个完整源码去编译,虽然多出了几行语句,但它却拥有NASM汇编工具所不能比拟的优势:定义函数(子程序)参数及局部变量供汇编代码引用,而免去使用如:[ebp+8]这样的书写,直接明瞭。当然代码是一致的,只是书写的引用形式不同。

第一个例子——“取颜色()”

例子实现与易语言自身所带“取颜色值()”同样功能,参数形式也一样。在这个例子中,我们一同来看看如何的在“置入代码MASM汇编工具”中定义参数供汇编代码引用。

打开“置入代码MASM汇编工具”,在注释行至"end"行之间,键入上述汇编代码(如上图7-17行代码)。代码中使用proc定义了一个含有“_red ”、“_green”、“_blue”三个参数的函数(子程序)。然后选择“编译”菜单→? “编译为置入代码”或右侧的蓝色三角按钮,这样就能生成我们置入代码所需的字节集数据。

粘贴生成的的代码入易程序,生成如下:

我们再来反汇编一下:

汇编代码“movzx eax,_red”编译后成“MOVZX EAX,BYTE PTR SS:[EBP+8]”

汇编代码“movzx eax,_green”编译后成“MOVZX EAX,BYTE PTR SS:[EBP+C]”

汇编代码“movzx eax,_blue”编译后成“MOVZX EAX,BYTE PTR SS:[EBP+10]”

这样一来,我们就可以完全省去对形如[ebp+8]这样的地址引用,而使用直观的“_reg”参数,余下的工作就让MASM编译器来帮忙,替换成“[ebp+8]”,这算得上一个大优势吧!可别高兴得太早,在子程序开始处怎么会看到

c 易语言置入代码6,易语言置入代码.doc相关推荐

  1. java 监控qq群信息_易语言通过监控图标实现QQ消息监控的代码

    DLL命令表 .版本 2 .DLL命令 GetWindowThreadProcessId___, 整数型, "user32.dll", "GetWindowThreadP ...

  2. 易语言调用子程序_ c,易语言汇编调用子程序源码

    .版本 2 .程序集 窗口程序集1 .子程序 __启动窗口_创建完毕 ' 调子程_Asm() ' 主要用于给某个子程序'自定义事件' 它等效于某官方支持库的'调用子程序()'命令 具体使用方法 可参照 ...

  3. 易语言时间转化linux格式,易语言取时间年月日格式化

    易语言取时间年月日格式化 怎么才能取出时间的年月日的代码形式?目前易语言自带代码取出的很精准!一般都取到秒了.但是在实际应用中或许用到的年月日是最多的一种格式. 下图为代码例子: 可以直接复制下面的代 ...

  4. 易语言 python库_精易Python支持库 (1.1#1205版)发布啦!

    精易Python支持库 (1.1#1205版) 本支持库提供了 6 种库定义数据类型,提供了 87 种命令. 支持库说明 该支持库为易语言调用并执行Python代码.文件提供了支持. 使用本支持库,可 ...

  5. 易语言高级表格写入MYSQL_易语言数据库与高级表格思路分析.doc

    易语言数据库与高级表格思路分析 篇一:易语言数据库操作指南 易语言数据库操作指南 一.易语言操作Access数据库 前面我们已经对比分析过易语言所支持的几种常见数据库,在这几种数据库中,我们先来学习一 ...

  6. 易语言基础编程知识〖E语言手册〗

        易语言手册易语言的命名约定 在易语言应用程序的编写过程中,用户涉及到定义各类名称,如:子程序名.变量名.数据类型名等等,这些名称的命名规则为:名称的首字母必须为全半角字母或汉字,其它字符必须为 ...

  7. 易语言写c盘配置文件,易语言写配置文件的方法

    易语言编程开发环境的诞生引领了一个编程新时代的到来.它以其本土化.易用化.开发速度快等优点迅速被广大编程爱好者所认可和接受."配置文件"这个术语相信大家都很熟悉了,因为日常生活中随 ...

  8. 易语言执行linux脚本,初识易语言到编写SHELL生成器

    下面开始实际的代码编写步骤.首先要先插入几个常量用来存放SHELL代码,点击插入按钮-选择常量(图15),右键选择插入新长文本常量(图16),常量名称改为一个方便易记的名字,最好是SHELL类型或者是 ...

  9. 易语言python1.1模块_易语言之编写模块与引入模块

    本人并不精通易语言,只是对其进行一定了解后做一个简单的总结. 直接新建一个易语言模块,然后添加子程序即可. 子程序当然可以随意命名,实际上,易语言的子程序就和c语言的函数,java中的方法一样(实际上 ...

  10. 易语言 标准c 动态库,易语言Dll动态库的开发

    一.关于易语言DLL 易语言Dll动态库的开发是编程当中和其他语言开发进行交互必不可少的方法之一,从易语言3.6版开始,已经能够支持对DLL动态链接库的开发, 编译出的DLL是标准的DLL,和其他编程 ...

最新文章

  1. java i o不会的地方_Java I/O 好复杂,傻傻分不清楚,别担心,我们有线索了。。。...
  2. c语言程序设计考试改革,C语言程序设计课程考试改革实施方案.pdf
  3. mongodb数据库,批量插入性能测试记录
  4. resharper 6.0 注册码
  5. python-面向对向-静态方法的继承-父类中的super方法
  6. 《英雄联盟》手游官宣!仍是原来配方和味道 它还能再火十年吗?
  7. 单平台软件开发多系统APP
  8. unity, 判断可见性
  9. 宋红康JVM 学习笔记
  10. ChromiumOS的分区格式
  11. GIT常用命令for QA
  12. 零基础搭建Win系统Anaconda+Pytorch+OpenCV深度学习环境(Win10、Win11、RTX 3090显卡也适用)
  13. STM32驱动RC522读卡完整资料分享,包含原理图、PCB、驱动工程文件
  14. 安装北洋雷达驱动以及可能遇到的问题
  15. easyExcel导入导出(列锁定单元格、表头合并、导出类型限制、锁定单元格增加底色、设置密码、隐藏列等)
  16. sklearn提示cannot import name ‘MaskedArray‘ from ‘sklearn.utils.fixes‘的解决方法
  17. 一段百年征程的有限单群
  18. PNAS:快速脑电波振荡识别并定位癫痫患者的大脑
  19. k8s部署wordpress应用
  20. Matlab中fft函数的使用与原理

热门文章

  1. 盘点VB编程重要知识点集合。
  2. php处理ubb代码,UBB代码详解
  3. Fiddler图标解释
  4. mysql什么是主键和外键?
  5. MATLAB下载+安装教程
  6. kotlin中文开发文档+视频教程+Android Studio 3.0下载地址
  7. springboot项目启动类报错
  8. iperf命令linux,Linux iperf 用法介绍
  9. TDH Inceptor 操作实战案例之 验证ACID
  10. 搭建Hadoop开发环境(全过程)