作者吱吱吱吱吱吱吱吱 |
66666666666666 |
很快 使用,比自带的快很多了![]() |
![]() |
全汇编文本操作模块速度 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
未离吖 发表于 2018-10-22 16:44 分割不会出错.但数组成员没有分配内存就不行. 两种.一种是在最开始就设置一个大的成员数. 第二种时在子程序返回前将数组重定义回0 |
大佬,为啥我运行的时候执行两次分割就会崩啊嘤嘤嘤 |
加上分隔符参数了.使用时注意第一条指令一定是 取数组成员数()
![]() ![]() ' 默认使用换行符分割 ![]() ![]() 局_内容 = 参_内容 ' 补齐分隔符 ![]() ![]() ' 将变量地址传到代码里,这个是可以直接取的.如果命令取的话.局部变量的存放位置就可以随意调整了 取变量地址 (局_内容) 置入代码 ({ 137, 195, 139, 27, 139, 75, 4, 141, 123, 8, 139, 69, 16, 139, 0, 139, 80, 4, 139, 69, 12, 139, 24, 131, 195, 4, 49, 192, 137, 3, 255, 3, 137, 123, 4, 252, 139, 69, 16, 139, 0, 141, 112, 8, 172, 242, 174, 227, 35, 65, 79, 81, 137, 209, 78, 243, 166, 117, 19, 137, 209, 49, 192, 41, 215, 243, 170, 255, 3, 139, 3, 193, 224, 2, 1, 216, 137, 56, 89, 41, 215, 71, 226, 208, 139, 69, 16, 139, 0, 138, 64, 8, 58, 71, 255, 116, 4, 255, 11, 235, 5, 49, 192, 137, 71, 255 }) ' ------------------使用说明---------------------- ' 代码调用前需要两个变量.一个是字节集的等分割内容.第二个是文本数组,需要提前定义成员数并在第一条命令执行 取数组成员数(文本数组) 来分配内存 ' 代码调用完成后,形成映像文本数组,实际内容存放在第一个字节集变量中.两者配合形成真正的数组.在使用完成前不要修改第一个变量的值. ' 测试时发现很多奇怪的分隔符,所以分隔符使用字节集了.方便调试和调用. ' mov ebx, eax 传进来的局部变量地址 ' mov ebx, dword [ebx] 取指针地址 ' mov ecx, dword [ebx+0x04] 取字节集长度 ' lea edi, dword [ebx+0x08] 取内容开始地址 ' mov eax, dword [ebp+0x10] 取分隔符地址 ' mov eax, dword [eax] ' mov edx, dword [eax+0x04] 取分隔符长度 ' mov eax, dword [ebp+0x0C] 取数组地址 ' mov ebx, dword [eax] ' add ebx, 0x04 保存数组成员数地址 ' xor eax, eax ' mov dword [ebx], eax 重置数组成员数 ' inc dword [ebx] 加入第一位成员 ' mov dword [ebx+0x04], edi 第一位成员地址指针 ' cld ' Label3: ' mov eax, dword [ebp+0x10] 取分隔符 ' mov eax, dword [eax] ' lea esi, dword [eax+0x08] ' lodsb ' repne scasb 扫描分隔符 ' jecxz Label1 内容扫描结束 ' inc ecx 退回一格进行完整的分隔符比较 ' dec edi ' push ecx 保存计数 ' mov ecx, edx 分隔符长度 ' dec esi ' rep cmpsb 比较分隔符 ' jne Label2 不是分隔符,跳 ' mov ecx, edx 将分隔符填充为0 ' xor eax, eax ' sub edi, edx ' rep stosb ' inc dword [ebx] 成员数加一 ' mov eax, dword [ebx] 取数组成员数 ' shl eax, 0x02 计算数组成员指针地址 ' add eax, ebx ' mov dword [eax], edi 写数据地址指针到成员表 ' Label2: ' pop ecx 恢复计数 ' sub edi, edx 修正指针位置 ' inc edi ' loop Label3 循环处理 ' Label1: ' mov eax, dword [ebp+0x10] 如果是单字节分隔符时 ' mov eax, dword [eax] ' mov al,byte ptr [eax+0x08] ' cmp al,byte ptr [edi-1] 比较是否是分隔符 ' jz addr3 ' dec dword [ebx] 不符合时减去开始增加的那个分隔符 ' jmp addrend ' addr3: ' xor eax,eax 写文本结束符 ' mov [edi-1],eax ' addrend:
|
sitemap|
易语言源码|
易语言教程|
易语言论坛|
易语言模块|
手机版|
广告投放|
精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司
( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173