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

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

我们都知道,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)也写过一个。说实话,这种小程序自己用,写的简陋些没关系,反正只是辅助程序,还可以随时调整嘛,但想发布的话,就要考虑通用性易用性,麻烦很多,况且用户也不多,所以发布此类程序的人很少,但是论坛上也确实有人发过。

感谢大家对我们的支持

(0)

相关推荐

  • 分析易语言内嵌汇编取变量指针的示例

    经本人研究内嵌汇编不能取自定义类型(成员非4字节,取来的是对齐结构的指针,比如成员为字节型分配4个字节),和非小数和整数,文本型数组不可以取指针,其它的都可以 要注意的是易的子程序前有EBP入栈操作,所以要有出栈操作才行 这是我写的取整数型指针的例子(字节型,短整数型,小数型,日期时间型,双精度小数型都通用,注意参数要为参考): .版本 2 .支持库 spec .子程序 取整数型指针, 整数型, 公开 .参数 整数, 整数型, 参考 'push ebp <------------这两句已经是易原

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

    很多朋友在编写易语言里要混合插入汇编语言等,如何解决呢?我们来看下 我们都知道,C++或Delphi的程序源代码中可以嵌入汇编代码,以达到某些特定目的.易语言作为实用而又功能强大的编程语言,也允许在代码中嵌入汇编,--当然严格来说,是嵌入机器指令代码.借助"特殊功能支持库"中的"置入代码"命令,可以完成这项功能.(liigo 2009.03.20补记:自易语言4.12版本起,"置入代码"已被移入核心支持库.) 为什么要在易语言中"置入代

  • iOS汇编入门教程之在Xcode工程中嵌入汇编代码的方法

    简介 上一篇文章ARM64汇编基础中介绍了汇编在iOS开发中的应用以及ARM汇编基础知识,本文将介绍在C或Objective-C构成的工程中如何嵌入汇编代码. 注意 在调试ARM汇编时,Xcode的Build对象必须为真机,如果对象为模拟器则是x86汇编. 内联汇编 汇编与C间接通信 在函数中可以直接插入汇编代码来影响函数的运行逻辑,使用的语法为编译指令 __asm__ ,注意插入汇编有可能会被编译器忽略,因此需要加入 __volatile__ 修饰符保证汇编代码有效. 下面给出一个简单的例子,

  • 编写高质量易语言代码注意点

    今天在淘百度的时候看到了这篇文章.觉得很不错.就给亲们分享下. 如果你想学好易语言的话请仔细看看以下的内容吧.看完此文之后保证你大有收获. 什么是一个高效的软件?一个高效的软件不仅应该比实现同样功能的软件运行得更快,还应该消耗更少的系统资源.程序的时间效率是指运行速度,空间效率是指程序占用内存或者外存的状况.另外程序的效率我们也可以分为全局效率和局部效率.全局效率是指站在整个系统的角度上考虑的效率,局部效率是指站在模块或函数角度上考虑的效率. 1. 使用整数和长整数 提高代码运行速度最简单的方法

  • 易语言弹出指定网址的方法

    如果想自己设计的易语言程序在打开时自动弹出指定网址怎么做呢 1. 首先下载一个易语言,最好是破解版的,可以静态编译. 2.打开易语言程序,单击新建按钮. 3.弹出新建对话框,选中windows窗口程序,点击确定按钮. 4.在设计区窗体任意位置双击鼠标,跳到代码输入区. 5.在代码输入区中输入打开指定网址 ("www.baidu.com")(以弹出百度为例) 6.点击图中的编译,选择静态编译,弹出对话框,填写程序名称和保存目录点确定. 7. 点击编译好的程序,测试一下是否弹出指定网页 点

  • 易语言接入打码平台的方法

    易语言作为一个可视化操作的中文编程软件,可以很更利的开发一些营销类的软件,能做自动化工作,这时对于有输入验证码的操作的,就要接入到打码平台了,现在看看易语言怎样接入到打码平台的! 1.对于打码平台,也是比较多的,如联众.打码兔等等,不能一一例举,不了解那些平台的可以的自行查询,这里以UU云平台作为举例!打开UU云平台网页.注册一个开发者帐号,必是是开发者帐号才可以! 2.登录进去后,可以看到有一个开发文档,这里就有详细的说明,包括用什么编程软件,api下载,函数的介绍等等!仔细看一看也是学到很多

  • 易语言外形框组件使用技巧方法

    估计很多新手朋友,不清楚易语言外形框组件的使用方法,今天,MovieClip就带大家一起学习.这次的测试程序是如何将一个窗口显示在外形框中.好了,开启我们的编程之路吧! 1.首先,运行易语言,在弹出的"新建工程"文件对话框中选择"Windows窗口程序"并点击"确定"按钮.如图: 2.在创建好的"Windows窗口"上绘制一个外形框组件和一个按钮组件,调整好相应组件的大小和位置.如图: 3.添加一个子窗口,调整子窗口的大小.并

  • 易语言开发中的问题总结

    大家在用易语言写程序的时候会遇到各种问题,甚至有些问题不知道原因会让你抓狂,这里就介绍易语言的各种疑难杂症的解决方法. 1.如图,意为:系统被修改,请恢复这些修改,运行终止(操作系统受损的一种) 1.是否添加了个别Windows7系统不支持的组件 如:VCL :2.在程序关闭的时候加个 "组件.销毁"或者"结束":3.这个提示也更操作系统有关系,如果使用的是精简版系统 可以考虑换:4.系统权限 程序无权用户写 system32目录:5.下载的易语言版本里部分支持库无

  • 易语言输入或修改名称本身方法

    在程序中经常需要输入或修改各类名称本身,譬如:加入一个新子程序后,可能需要修改其子程序名称:在设计窗口上绘制上一个组件后,可能需要修改其组件名称,等等.在输入或修改名称本身的过程中,输入字不能用来引用其它已有名称,但可以引用专用的名称输入词组.所谓"名称输入词组",类似于通常中文输入法中的自定义词组.用户在输入或修改名称的过程中按下空格键后,系统将自动使用位于当前光标前的输入字去搜寻系统中的名称输入词组,如果找到,就用匹配词组替换该输入字,否则加亮显示该输入字,表示未找到.系统中所有的

  • C语言代码中调用C++代码的方法示例

    由于历史原因,以及不同开发人员的技术偏好,C语言和C++语言都有一些独有的非常有价值的项目,因而两种语言的互操作,充分利用前人造的轮子是一件非常有价值的事情. C++代码调用C代码很简单,只要分别在包含的C头文件的开头和结尾加上如下的两个块: #ifdef __cplusplus extern "C" { #endif 和 #ifdef __cplusplus } #endif 即可. 然而为了支持类.重载等更加高级的特性,在编译C++代码时,C++符号会被修饰.我们dump Linu

  • 易语言软件加VMProtect壳的方法解析

    VMP是一款很强大的加密壳,代码虚拟化技术可以很好的保护程序不被恶意修改破J但是很多人不知道怎么给自己的程序加壳,今天给大家晋级下加壳的正确方法 相信很多新手都以为只要把软件直接拖到VMP里重新编译一下就是加壳了其实这样是没有达到任何的防破J效果.易语言加VPM壳少不了这两行重要代码 置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' VMP保护开始标志 置入代码

随机推荐