x86 汇编转易语言置入代码 —— AsmToECode


下载

附件:AsmToECode V1.1.zip

介绍

本工具原发布于旧版博客,现重新发布于新版博客。

尽管从现代角度来看,易语言的架构与语法设计已经过时,然而有时为了维护屎山或重温记忆,亦或是为了某些特殊需求,我们可能仍然需要使用易语言、并可能需要使用本工具。故应圈友要求,重新发布本工具,方便其它曾使用过本工具的人,继续维护相关项目。

易语言有个特殊命令(库函数)叫 置入代码,可以直接以机器码(shell code)的形式在易语言程序中嵌入指令,然后执行。然而,考虑到我们平时一般写的是人类可读的汇编代码(assembly),所以我(在 2016 年)写了个工具,将汇编代码转换为机器码。

代码例程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
; 软件特点:
; 1、支持使用@arg声明易语言定义的参数,使用@local声明易语言已定义的变量
; 2、支持显示错误行号
; 3、支持中文标识符
; 4、支持代码高亮
; 5、支持智能提示
; 6、支持宏、结构、联合体等高级masm功能
; 7、支持@ret伪指令(根据参数个数自动转换为retn N,并自动添加leave)
; 8、支持.if .while等高级伪指令
; 9、支持mmx指令集(需要添加.mmx伪指令)

; 注意:
; 本软件在XP下使用MASM V10,在Win7或更高版本的操作系统上使用MASM V12
; 可能导致在XP下生成的机器码与Win7或更高版本的操作系统上生成的机器码不同
; 同时,我们也不推荐您使用XP系统,如果您使用XP系统,建议您尽快更新操作系统


; 实例代码:

@arg arg1 ;定义在易语言子程序中定义的变量,名称可不同,顺序需相同
@arg arg2:dword ;dword为类型
@local local1 ;定义已在易语言中声明的局部变量,顺序需相同
local local2 ;定义未在易语言中声明的局部变量,需在所有 @local 伪指令之后定义
mov local2,1 ;local2 = 1
mov eax,local2 ;eax寄存器 = local2
add eax,local1 ;eax寄存器 = eax寄存器 + local1
add eax,arg1 ;eax寄存器 = eax寄存器 + arg1
add eax,arg2 ;eax寄存器 = eax寄存器 + arg2
;注:Win32下,返回值通过eax寄存器传递

@ret
;本软件提供的返回伪指令(会自动根据参数个数转换为retn 8,并在此指令之前添加leave指令)

;代码作用:返回(local2 + local1 + arg1 + arg2),其中局部变量local2在汇编中定义,并赋值为1。其他局部变量和参数均需要在易语言中定义