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