当前位置: 首页 > 编程笔记 >

易语言代码中嵌入汇编/机器码方法

燕飞文
2023-03-14
本文向大家介绍易语言代码中嵌入汇编/机器码方法,包括了易语言代码中嵌入汇编/机器码方法的使用技巧和注意事项,需要的朋友参考一下

很多朋友在编写易语言里要混合插入汇编语言等,如何解决呢?我们来看下

我们都知道,C++或Delphi的程序源代码中可以嵌入汇编代码,以达到某些特定目的。易语言作为实用而又功能强大的编程语言,也允许在代码中嵌入汇编,——当然严格来说,是嵌入机器指令代码。借助“特殊功能支持库”中的“置入代码”命令,可以完成这项功能。(liigo 2009.03.20补记:自易语言4.12版本起,“置入代码”已被移入核心支持库。)

为什么要在易语言中“置入代码”呢?

  • 一是完成易语言不好直接完成的工作(例如,调用子程序,取变量地址,取对象方法地址,等等,当然,“置入代码”也不是唯一途径,通过外部支持库往往也能完成)
  • 二是提高代码执行效率(这个容易理解,不多说了)。

使用“置入代码”对程序员有什么要求?要熟悉汇编,会写汇编代码;会使用至少一种基于汇编的调试器(如Ollydbg);要了解或会分析易语言编译器生成的机器代码;要对易语言底层技术有所了解,如文本、字节集、数组等数据格式,参数传递方式,命令调用约定等。“置入代码”在易语言中属于“高级命令”,是专门为具有一定编程能力的高级程序员特别是熟悉汇编编程的专业人士提供的。一般初学者,如果半懂不懂,最好不要涉及,直接使用别人写好的模块或支持库比较好,毕竟易语言的功能已经足够强大,很多问题都已经有了现成的解决方案。

“置入代码”的原理。其实质是,在易语言编译过程中,编译器将“置入代码”的参数所指定的机器指令数据,直接输出到EXE/DLL中。因为这个动作是在编译时进行的,所以参数指定的机器码只能是常量,而不能是变量。同样,因为是编译时处理,运行时并不执行,因而程序执行时并不依赖支持库(即程序发布时不需携带特殊支持库spec.fne文件)。

使用“置入代码”都有什么步骤?

  1. 写出汇编代码;
  2. 通过汇编器将汇编代码编译为机器码;
  3. 将机器码转换为易语言字节集常量数据,并作为参数传入“置入代码”。

第一步没什么好说的,是考验汇编功力的地方,是硬功夫,没有技巧的。

第二步,我们可以借助“Ollydbg”等汇编器完成(当然也可以通过查询Intel x86 指令手册,纯手工将汇编代码编译为机器指令码,除非变态或超级牛叉的人不会采用)。首先启动Ollydbg,打开任意一个EXE程序,在汇编代码区双击任意一行,在弹出的汇编窗口中,输入第一步写好的第一行汇编代码,回车,就可以在机器指令区域(汇编代码区域左侧)看到相应的机器指令了,如此循环,逐行输入所有汇编代码,就可以得到相应的机器指令代码了。

第三步也相对容易,主要工作可能就是将Ollydbg生成的16进制指令代码转换为10进制。如果代码不长,借助“计算器”纯手工操作也行。一般来说,通常会用易语言写一个小程序,解析从Ollydbg中复制出的文本,提取其中的机器指令代码,进行数制转换,生成易语言字节集数据的文本格式。这种小程序很容易写,我想“置入代码”的使用者中很多人(据我了解不下10个)都写过类似的程序,我(liigo)也写过一个。说实话,这种小程序自己用,写的简陋些没关系,反正只是辅助程序,还可以随时调整嘛,但想发布的话,就要考虑通用性易用性,麻烦很多,况且用户也不多,所以发布此类程序的人很少,但是论坛上也确实有人发过。

感谢大家对小牛知识库的支持

 类似资料:
  • 程序员用各种编程语言编写指令,有些是计算机直接理解的,有些则需要中间翻译(tranlation)的步骤。如今使用的计算机语言有几百种,可以分为三大类: 机器语言 汇编语言 高级语言 任何计算机只能直接理解本身酌机器语言(machine language)。机器语言是特定计算机的自然语言,由计算机的硬件设计定义。机器语言通常由一系列数字组成(最终简化0和1),让计算机一次一个地执行最基本的操作。机器

  • 译者:巩子惠 词嵌入是一种由真实数字组成的稠密向量,每个向量都代表了单词表里的一个单词。 在自然语言处理中,总会遇到这样的情况:特征全是单词!但是,如何在电脑上表述一个单词呢?你在电脑上存储的单词的ascii码,但是它仅仅代表单词怎么拼写,没有说明单词的内在含义(你也许能够从词缀中了解它的词性,或者从大小写中得到一些属性,但仅此而已)。 更重要的是,你能把这些ascii码字符组合成什么含义?当代表

  • 本文向大家介绍易语言获取开机时间dll代码,包括了易语言获取开机时间dll代码的使用技巧和注意事项,需要的朋友参考一下 易语言怎么获取开机时间dll代码 下面是代码dll(复制即可): 使用方式: 调试输出 (四舍五入 (GetTickCount () ÷ 1000, 0)) 一个代码就可以实现查看开机时间代码哦!赶快试一试吧! 下面是复制粘贴在易语言dll命令里面的代码例子,如果你复制的不一样,

  • 本文向大家介绍易语言去ASCII码的方法,包括了易语言去ASCII码的方法的使用技巧和注意事项,需要的朋友参考一下 易语言取代码,这个命令可以取到文本的,ASCII码,我教大家操作。 1、易语言新建一个windows窗口 点击进入代码编辑区 具体看如何用易语言编写自己第一个程序? 2、我们输入 这个命令 取代码() 3、展开这个命令 我们发现只有两个参数 4、第一个参数我理解,我们输入“s” 第二

  • 本文向大家介绍易语言盗号源码编写及使用方法,包括了易语言盗号源码编写及使用方法的使用技巧和注意事项,需要的朋友参考一下 易语言盗号源码编写教程 首先你需要开通邮箱。QQ邮箱即可。需要开启QQ邮箱的发信功能。如果是QQ邮箱。开通邮箱后15天内才能使用这个功能,所有推荐大家注册163邮箱。这样又安全。还可以防止软件被人拆解开了不会泄露你的QQ密码。首先上一段代码: 其他的可以填写也可以不用填写。之后的

  • 本文向大家介绍易语言保护壳的sdk代码,包括了易语言保护壳的sdk代码的使用技巧和注意事项,需要的朋友参考一下 ZProtect //Code_Confusion 是代码乱序加密标记,允许您选择一部分被乱序的代码 置入代码 ({ 235, 8, 83, 84, 95, 83, 84, 65, 82, 84 }) ' Code_Confusion标记开始 置入代码 ({ 235, 8, 83, 84