精易论坛

标题: 关于汇编代码写入E语言 [打印本页]

作者: 心痛    时间: 2025-2-13 12:50
标题: 关于汇编代码写入E语言
mov edx,00FAB6FF
xor eax,eax
数据包存放:movzx ecx,byte ptr [eax+我的数据包存放地址]
inc eax
mov [edx],ecx
inc edx
cmp eax,12
jl 到 上面的数据包存放地方
add edx,FFFFFFEe
call 我的程序集
ret
有大佬可以给个例子吗? 这个在E语言中怎么写.

作者: KD飞飞    时间: 2025-2-13 13:06
  
.支持库Extension
// 定义一些变量
字节数据 = []
目标地址指针 = 0
源地址指针 = 0
目标地址 = "00FAB6FF" // 根据实际情况修改
源地址 = "我的数据包存放地址" // 根据实际情况修改
程序集地址 = "我的程序集" // 根据实际情况修改
// 分配内存(模拟 mov edx, 00FAB6FF)
目标地址指针 = 整数_从十六进制文本 (目标地址)
// 分配内存空间
分配的内存 = API.分配内存 (目标地址指针, 100) // 分配 100 字节的内存
源地址指针 = 整数_从十六进制文本 (源地址)
源数据 = 读取内存 (源地址指针, 12) // 读取 12 字节数据
目标地址指针 = 整数_从十六进制文本 (目标地址)
// 将源数据写入目标地址
API.写入内存 (目标地址指针, 源数据)
目标地址指针 = 目标地址指针 + 12
// 调整指针(add edx, FFFFFFEe,等同于目标地址指针 - 18)
目标地址指针 = 目标地址指针 + (-18)
// 调用我的程序集
API.调用函数 (程序集地址)
// 最后返回


i支持库列表   支持库注释   
eAPI应用接口支持库


作者: 真IKUN    时间: 2025-2-13 13:20
https://125.confly.eu.org/forum.php?mod=viewthread&tid=14781323
作者: liwei321gogo    时间: 2025-2-13 13:47
  
窗口程序集名保 留  保 留备 注
程序集1   
变量名类 型数组备 注
数据包存放地址字节型12"  ' 假设原始数据包存放 
目标地址字节型30"       ' 预留足够空间(12 

子程序名返回值类型公开备 注
_启动子程序整数型 
变量名类 型静态数组备 注
eax整数型 
edx指针整数型 
' 初始化指针(假设目标地址从第7个字节开始)
edx指针 = 取变量数据地址 (目标地址) + 6  ' 对应 00FAB6FF 的模拟
' 清空计数器
eax = 0
' 开始循环复制数据
判断循环首 (eax < 12)
' 读取源数据并写入目标地址
目标地址 [eax + 6] = 数据包存放地址 [eax]  ' +6 对应 edx 初始位置
eax = eax + 1
判断循环尾 ()
' 调整指针位置(edx = edx +12 -18 = edx -6)
edx指针 = edx指针 - 6
' 调用处理程序
我的程序集 (edx指针)
返回 (0)
子程序名返回值类型公开备 注
我的程序集  
参数名类 型参考可空数组备 注
内存指针整数型
' 这里添加处理内存数据的代码



作者: a4561482    时间: 2025-2-13 14:05
.版本 2

.子程序 数据包处理, 公开
.局部变量 目标地址, 整数型
.局部变量 源数据, 字节集
.局部变量 计数器, 整数型

' 设置目标地址
目标地址 = &H00FAB6FF

' 假设源数据是一个12字节的数据包
源数据 = 字节集 ({1,2,3,4,5,6,7,8,9,10,11,12})  ' 这里用示例数据

' 复制数据
计数器 = 0
.判断循环首 (计数器 < 12)
    内存写入字节型 (目标地址 + 计数器, 取字节集数据 (源数据, 计数器 + 1))
    计数器 += 1
.判断循环尾

' 调整目标地址
目标地址 += -18  ' FFFFFFEe 是 -18 的补码

' 这里可以调用您的程序集
' 调用动态链接库 ("您的DLL.dll", "函数名", 参数...)

返回 ()
.子程序结束       cursor  写的
作者: 云南丿小海堂    时间: 2025-2-13 15:37
在易语言中,直接编写汇编代码是不支持的,但可以通过调用外部DLL或使用易语言的内置函数来实现类似的功能。以下是一个简单的例子,展示如何在易语言中实现类似的功能。

假设我们要将一段数据包的内容复制到另一个内存地址,并调用一个子程序。以下是一个可能的实现:

easy
复制
.版本 2

.程序集 程序集1

.子程序 _启动子程序, 整数型, 公开
    .局部变量 数据包存放地址, 整数型
    .局部变量 目标地址, 整数型
    .局部变量 计数器, 整数型
    .局部变量 数据包内容, 字节型, , "12"

    ' 假设数据包存放地址为0x1000
    数据包存放地址 = 十六进制 (“1000”)
   
    ' 假设目标地址为0x00FAB6FF
    目标地址 = 十六进制 (“00FAB6FF”)
   
    ' 初始化计数器
    计数器 = 0
   
    ' 循环复制数据包内容
    .循环判断首 ()
        ' 读取数据包内容
        数据包内容 [计数器] = 读内存字节型 (数据包存放地址 + 计数器)
        
        ' 将数据包内容写入目标地址
        写内存字节型 (目标地址 + 计数器, 数据包内容 [计数器])
        
        ' 增加计数器
        计数器 = 计数器 + 1
        
        ' 判断是否完成复制
    .循环判断尾 (计数器 < 12)
   
    ' 调整目标地址
    目标地址 = 目标地址 + 十六进制 (“FFFFFFEe”)
   
    ' 调用子程序
    调用子程序 (我的程序集)
   
    ' 返回
    返回 (0)

.子程序 我的程序集
    ' 这里可以编写你的程序集代码
    信息框 (“程序集被调用”, 0, )
解释:
数据包存放地址:假设数据包存放在内存地址 0x1000。

目标地址:假设目标地址为 0x00FAB6FF。

计数器:用于循环计数,确保复制12个字节。

读内存字节型 和 写内存字节型:易语言中的内存读写函数,用于读取和写入内存中的字节数据。

调用子程序:调用一个子程序,模拟汇编中的 call 指令。

注意事项:
易语言本身不支持直接操作内存地址,因此需要使用外部DLL或API来实现内存读写操作。

上述代码中的内存地址和操作是假设的,实际使用时需要根据具体情况进行调整。

如果你有更复杂的需求,可能需要使用C/C++等语言编写DLL,然后在易语言中调用。
作者: 8ss5s5s82    时间: 2025-2-14 15:26
用CEAA     易语言 直接开启 CE 汇编窗口 就进去了




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4