⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁   原来一些32位版发表在 http://www.x86asm.com   因暂停。更新的版本改上传于你处。    在原来的基础上。 增加了简单的宏指令. 增加了链接分散的汇编文本能力. 增加
💻
📖 第 1 页 / 共 2 页
字号:


     这是在快结束阶段要做的事情.
后期
 MOV ECX,[EBP+文长]        C7A8
 MOV EAX,[EBP+总领末]    30
 MOV EDX,[EBP+绣界]     A560,4470
 SUB EDX,[EBP+绣首]
 MOV EAX,[EBP+绣尾]
 SUB EAX,[EBP+绣首]  这里只是观察一下空间使用情况而矣.
 NOP
 MOV EDX,[EBP+册界]  没有其它的真实意思.
 SUB EDX,[EBP+册首]    14AE0,9620
 MOV EAX,[EBP+册尾]
 SUB EAX,[EBP+册首]
 NOP
 MOV EDX,[EBP+产界]    A560,3000
 SUB EDX,[EBP+产首]   上述代码目前只用于调试.可以删除.

 CMP DW [EBP+PE领],0
 JZ +4  如果是0,则为手工头部和手工段.不进行对齐.
 PUSH EDI
 CALL 补齐段  确定最后段的段长
 POP EDI   返回的EDX本来指向下一个新段.
 MOV [EBX+50],EDX   总的内存长度写入头部

 MOV [EBP+产尾],EDI  产尾与产界好象也可以合并的.
 SUB EDI,[EBP+产首]      
 JZ DW 异常退出  没有文件可以生成的.
 MOV [EBP+产长],EDI

 清理签名:
 MOV ESI,[EBP+册首]
后期环
 CMP ESI,[EBP+册尾]  最后一个准备着的,但并没有写数据.
 JAE DW 存盘退出
 MOV EAX,[ESI+签性]
 TEST AH,20    标志位5=1,使用签.
 JZ 继扫描签   不是用签
 MOV ECX,[ESI+签长]  这里可以压缩CL?
 MOV EDI,[ESI+签址]
 CALL 准备找签
继扫描签
 LEA ESI,[ESI+签枕]
 JMP 后期环

准备找签   找将.
     位1定签02, 位3行差数08,位4行号偏10,位5用签20.
 TEST AH,8   行差数     行数并,行号偏作为用签,且先行.
 JZ 找用签
 行差  现在规定签数是当前位置签壤+N.
        签长才是差值.
 CMP [ESI+签前符],'-'
 JNZ +1   +0正数为下一个.
 SUB ECX,2    而-0则要-2.
 SHL ECX,3   4+4字节.  对于行差签来说,EDI为其绣址
 MOV EDX,[EDI+ECX]  EDI为当前注册它时绣到达的位置
 XCHG ECX,EDX
行号偏
 SUB ECX,[ESI]    减去当前位置的差.EDX为兵壤.
 MOV [ESI],ECX  
 JMP 用签入壤

找用签
 CALL 查找签名  成功后返回对方EBX下的签数ECX,签壤EDX?
 JB 找签败回 
 TEST AH,10  位4行号偏
 JNZ 行号偏

 CALL 特殊用签   一般的为另一处的壤在当前处的情况.

用签入壤
 MOV EDI,[ESI+签壤] 
数值入壤  如果没有必要,一定要让2P,7S为0!
 PUSH ESI
 CALL 写值入壤
 POP ESI
找签败回
 RET

叮缓数入壤
 PUSH ESI
 MOV ESI,[EBP+缓数值址]
 CALL 写值入壤   压栈和还原了ESI.
 POP ESI
 RET

写值入壤
 SAHF   6ZF,0CF. 7SF,2PF.
 JP 其它扩展方式
   XXX  JS   目前没定义
 JA +7 单字节   7=0,6=0,0=0  
 JNZ +4  双字节   1
 JNB +1 四字节    40
 MOVSD             41
 MOVSD
 RET
 MOVSW
 RET
 MOVSB
 RET
其它扩展方式
 JA +0  空操作.
 RET

特殊用签  各种符号可以自己定义.
 MOV AL,[ESI+签前符]
 CMP AL,"&"
 JNZ +3
 SUB ECX,400000  加1000-200   .rdata中的基本位置
 MOV [ESI],ECX
 RET
 CMP AL,"!"
 JNZ +2
 MOV [ESI],ECX  加402000-800   实际.code位置
 RET
 MOV [ESI],ECX
 RET
 

查找签名   找兵
  分两次: 倒回找签和向下找签.
 MOV EBX,ESI  从当前倒回到册首找签
 SUB EBX,签枕值
 CMP EBX,[EBP+册首]
 JB +3 向下找签
 CALL 签名比较
 JB -3
 JMP +6 成功找到一个.

 MOV EBX,ESI   向下找签
 LEA EBX,[EBX+签枕]
 CMP EBX,[EBP+册尾]
 JAE +4          册尾???有效吗??
 CALL 签名比较
 JB -3
  这里的成功可以直接写数据!!!
 MOV ECX,[EBX+签数] 签数放在这里吗?
 MOV EDX,[EBX+签壤]
 RET
 STC
 RET
  正下尾找签:


签宏比较
 TEST [EBX+签性顶],10
 JMP +1
  串比较.... 输入的EDI,ECX与当前的[EBX]中.
签名比较  这是一个子程序
 TEST [EBX+签咛],2    位1=1,都为定义签.
 JZ 签不相同
 CMP ECX,[EBX+签长]
 JNZ 签不相同
 PUSHAD
 MOV ESI,[EBX+签址]  串在壤中位置
 F3A6   REPZ CMPSB  搜索用和再还原的是SI,DI.
 POPAD
 JZ +1 相等则找到了
签不相同
 STC   有借位,JB为不同.
 RET


登绣 这里可以使用比较交换指令.
 CMP EDI,[EBP+绣正]  注意,这里的绣正是指绣尾中正在使用的值.
 JZ 登绣回  如果没有变化则不注册.
 PUSH ESI  可以简化,但差不多.即用[SI]代替[绣正]
 PUSH EDI
 MOV ESI,[EBP+绣尾]  取绣段  可以用BX吗?
 CMP ESI,[EBP+绣界]
 JA DW 异常退出
 MOV [EBP+绣正],EDI  放入伪壤.
 MOV [ESI+4],EDI
 ADD EDI,[EBP+段差]   前址中算入真壤.
 MOV [ESI],EDI
 ADD DW [EBP+绣尾],8
 POP EDI
 POP ESI
登绣回
 RET



   我怎么总是舍不得改变EDI?  
交串集串   源ESI成串尾,ECX没有变化.但EDI也变化了.
 XCHG ESI,EDI
 PUSH -1
 POP EBX  起码应有一个.使得其以0开始. 
 CALL 串集串环
 XCHG ESI,EDI
 RET

内增的串   大次数在EBX,小次数在EDX上.
 INC EDX
串比较AL   此处也有两个人想进入.
 CBW:CWDE  AL的高位已经置为0了.
 CMP EAX,ECX
 JNZ 串集继续  串长不相同
 PUSHAD:REPZ:CMPSB:POPAD
 JZ 串集串成  成功 =0且没有进借位.
串集继续   串不相同
 ADD ESI,EAX  在此点上,IA64和非64还是不一样.

串集串环
 LODSB
 SUB AL,80
 JZ 串集败回
 JA 内增的串
 INC EBX     最高位为0是EBX增加的串 累计.
 SUB EDX,EDX 
 ADD AL,80
 JNZ 串比较AL
 JMP 串集串环 空增的串  回串集串

串集串成
 LEA EDI,[EDI+ECX]
 RET 

串集败回
 MOV AH,1
 SAHF   有借位,且不为零,没有找到串. 若AL=80
 RET


   串类子程序显得非常得多.
     基本的为界类,和基本串普通串.

数引后取串  待16制串和引号串都取完后才取串.
 CALL 取串     无余串返回JB,和有余串返回JNB.
 JB 数引返回 
重新数引      EBX作为其尾首是否连接的判断.
 JZ 连写引号串
连写16制串
 CALL 判写16制   有前后空符的要求.
 JB 有余串返回  都仅在此处作还有余串.

16制查连引  16制数后面是否有引号数.
 MOV EBX,ESI
 INC EBX
 CALL 取串
 JB 取引无余串 无余串返回  其后取不到串了.
 JNZ 取引无余串  如果不是引号错误.
 CMP EBX,ESI  EBX比ESI小. 使不等时有借位.
 JZ 连写引号串
取引无余串
 DEC EBX  不减好象也可以.
取16制无余串
 MOV ESI,EBX
无余串返回
 STC
数引返回 
 RET


连写引号串  都是JZ的才转到这里来.
 REP:MOVSB
   这里是引号后检查是否可以连16制.
 INC ESI
 MOV EBX,ESI
 CALL 取串  多个引号也不行! 要用可在前加冒号.
 JB 取16制无余串
 JZ 取16制无余串  不许还有引号串,也不可作余串!
 CMP EBX,ESI
 JNZ 取16制无余串
 CALL 判写16制
 JNB 16制查连引  成功后继续检查是否可以连续引号
 RET  无余串结束.

判写16制
 CALL 判16制偶串
 JAE -2  返回,数引败
 CALL 前空符4种
 JNZ 无余串返回
 CALL 后断符6种
 JNZ 无余串返回  与写败16制共用.
 SHR CL,1
 CALL 直译16制  
 STOSB
 LOOP -1
有余串返回  与写成16制共用.
 CLC
 RET

读可延符   如果在没取到冒号前,是这些符号,不可取.
 CALL 读一字节
 JBE +7
 CMP AL,20
 JB +5
 CMP AL,'`'
 JZ +3
 CMP AL,"'"
 JZ +1
 CMP AL,'"'
 RET

  


前断符6种
 CMP AL,D
 JZ -1
 CMP AL,A
 JZ -3
前空符4种

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -