找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: CrLf

人工构造 ascode

[复制链接]
发表于 2015-5-10 13:56:23 | 显示全部楼层
本帖最后由 email10t 于 2015-5-10 14:01 编辑

回复 3# CrLf
补充:
  1. 60        pusha
  2. 61        popa
  3. 62-63        无
  4. 64        fs:
  5. 65        gs:
  6. 66        push dword *
  7. 67        imul dword *
  8. 68        push word *
  9. 69        imul word *
  10. 6a        push byte *
  11. 6b        imul byte *
  12. 6c        insb
  13. 6d        insw
  14. 6e        outsb
  15. 6f        outsw
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 感谢补充!

查看全部评分

发表于 2015-5-10 14:23:16 | 显示全部楼层
参考一贴中汇总的帖子内容,其实在 debug 里逐步跟踪就能了解如何具体实现了,只是很累罢了。
其实我也只是 ...
CrLf 发表于 2013-1-21 20:02

无限循环:
  1. ,/Pj!]_j@X(C!j#X(C"+!
复制代码
反汇编结果是:
  1. sub al,2fh
  2. push ax
  3. push 21h
  4. pop bp
  5. pop di
  6. push 40h
  7. pop ax
  8. sub [di+bp+21h], al
  9. push 23h
  10. pop ax
  11. sub [di+bp+22h], al
  12. db "+!"
复制代码
 楼主| 发表于 2015-5-10 19:59:02 | 显示全部楼层
本帖最后由 CrLf 于 2015-5-10 20:13 编辑

回复 16# email10t


感谢补充!
不过 debug 无法识别这一部分指令,但是确实能运行...
应该是 debug 的问题,居然连 pusha 都不支持,用 a 命令试图写入 pusha 也报错
顺便请教下兄台是用什么编写的,能够边写边查看机器码?


回复 17# email10t


也来一个无限循环:
  1. H4P4cP[0@?u2
复制代码
使用 debug 生成:
  1. debug loop.com

  2. rdi
  3. fffe

  4. rsi
  5. 100

  6. a
  7. dec ax
  8. xor al,50
  9. xor al,63
  10. push ax
  11. pop bx
  12. xor [bx+si+3f],al
  13. db 75 32

  14. rcx
  15. c
  16. w
  17. q
复制代码
 楼主| 发表于 2015-5-11 04:12:54 | 显示全部楼层
回复 17# email10t


来个 4 字节的,仅能保存为gb2312编码:
  1. AA帻
复制代码
反汇编:
  1. inc cx
  2. inc cx
  3. loopnz 0101h
复制代码
既然都作弊了,索性再来一个 2 字节的:
复制代码
反汇编:
  1. jmp 0100h
复制代码
发表于 2015-5-17 17:02:38 | 显示全部楼层
Hello World:
  1. RQPUWP]UZV_BBBB5``PY(E.(E3)E5)E:(E>)EFSX3CH<P}pE< ~r%ooQRY2AY0@G uG0EGB?
  2. KO00O0KNX01K91200JMJKN2OLN9J8NNKO0001KNp01K93030JMJKN2OLKN0001_]XYZN9N810
  3. K40NK307KM1L018J4600453L00t04LM10NKO4K407LM21K8004LLM21hello20world2100
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 nice

查看全部评分

发表于 2015-5-17 17:45:18 | 显示全部楼层
来个构思详解:
---------------------------------------------------------------------------
臭不要脸 ...
CrLf 发表于 2014-11-23 00:25


寄存器:
  1.    
  2. AX=0000  BX=0000  CX=00FF  DX=101D   SP=FFFE  BP=091E  SI=0100  DI=FFFE
  3. DS=101D  ES=101D  SS=101D  CS=101D   IP=0100  NV UP EI PL ZR NA PE NC  TF=0
复制代码
 楼主| 发表于 2015-5-17 18:26:29 | 显示全部楼层
回复 21# email10t


    ZR 和 PE 是怎么测试得到的?
发表于 2015-5-17 19:30:55 | 显示全部楼层
本帖最后由 email10t 于 2015-5-18 13:01 编辑

看来 Hello World 程序可能是这样:
  1. 4*7Pj9^]4*7Pj<^]j`X(B (B (B!(B"(B"(B#(B$(B$(B&(B'(B'(B)(B,(B.(B/(B0(B1(B2(B3(B3(B4(B5(B7(B7(B8(B:(BKtnsg}zaJF`E<`td-pKTtg-!x`L-!
  2. Hello, World!`
复制代码
用的是 emu8086 编译的:
  1. org 100h

  2. xor al,"*"
  3. aaa        
  4. push ax
  5. push 3ch
  6. pop si
  7. pop bp
  8. push 60h
  9. pop ax
  10. sub [bp+si+20h], al
  11. sub [bp+si+20h], al
  12. sub [bp+si+21h], al
  13. sub [bp+si+22h], al
  14. sub [bp+si+22h], al
  15. sub [bp+si+23h], al
  16. sub [bp+si+24h], al
  17. sub [bp+si+24h], al
  18. sub [bp+si+26h], al
  19. sub [bp+si+27h], al
  20. sub [bp+si+27h], al
  21. sub [bp+si+29h], al
  22. sub [bp+si+2ch], al
  23. sub [bp+si+2eh], al
  24. sub [bp+si+2fh], al
  25. sub [bp+si+30h], al
  26. sub [bp+si+31h], al
  27. sub [bp+si+32h], al
  28. sub [bp+si+33h], al
  29. sub [bp+si+33h], al
  30. sub [bp+si+34h], al
  31. sub [bp+si+35h], al
  32. sub [bp+si+37h], al
  33. sub [bp+si+37h], al
  34. sub [bp+si+38h], al
  35. sub [bp+si+3ah], al
  36. sub [bp+si+4bh], al
  37. db 74h,6eh,73h,67h,7dh,7ah,61h,4ah,46h,60h,45h,3ch,60h,74h,64h,2dh,70h,4bh,54h,74h,67h,2dh,21h,78h,60h,4ch,2dh,21h,0dh,0ah
  38. db "Hello, World!`"
复制代码
发表于 2015-5-18 13:15:47 | 显示全部楼层
看来 Hello World 程序可能是这样:用的是 emu8086 编译的:
email10t 发表于 2015-5-17 19:30


有没有更短的 ascii assembly ?
 楼主| 发表于 2015-5-18 15:50:00 | 显示全部楼层
本帖最后由 CrLf 于 2015-5-20 01:01 编辑

回复 24# email10t


int 21h 的 9 号中断
利用 bp=91e 可直接令 ah=9
  1. echo ,RP_0Ee0Eg74 42PZUXc!mHello, World!$>问好.com
  2. 问好
复制代码
debug 的格式:
  1. sub al,52
  2. push ax
  3. pop di
  4. xor [di+65h],al
  5. xor [di+67h],al
  6. aaa
  7. xor al,20
  8. xor al,32
  9. push ax
  10. pop dx
  11. push bp
  12. pop ax
  13. db 63 21
  14. db 6d
  15. db 'Hello, World!$'

  16. rcx
  17. 24
  18. w
复制代码
emu8086 的格式:
  1. ORG 100h

  2. SUB AL,52h
  3. PUSH AX
  4. POP DI
  5. XOR [DI+65h],AL
  6. XOR [DI+67h],AL
  7. AAA
  8. XOR AL,20h
  9. XOR AL,32h
  10. PUSH AX
  11. POP DX
  12. PUSH BP
  13. POP AX
  14. DB "c!m"
  15. DB 'Hello, World!$'
复制代码
发表于 2015-5-19 21:08:17 | 显示全部楼层
本帖最后由 email10t 于 2015-5-19 21:24 编辑

回复 3# CrLf

ascode可用指令大概有这些:
  1. *:  and sub xor cmp j*  daa das aaa  inc dec  push pop pusha popa imul insb insw outsb outsw
复制代码
emu8086 不能直接使用 insb insw outsb outsw,需要 db (define byte)
ascode 不能直接使用 jnle 指令

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 感谢补充!

查看全部评分

 楼主| 发表于 2015-5-20 01:06:05 | 显示全部楼层
回复 26# email10t


感谢补充
jnle 等同 jg,其实按理也在可见字符范围内,不过 0x7f 确实是特例,给忘了,谢谢提醒
发表于 2015-7-1 13:23:15 | 显示全部楼层
这类代码过时了
 楼主| 发表于 2015-7-1 16:01:14 | 显示全部楼层
回复 28# email10t


    嗯,64位系统不支持,已经退出历史舞台了
发表于 2015-8-16 10:48:49 | 显示全部楼层
寄存器是有初始状态是这样的:
  1. AX=0000 BX=0000 CX=00FF DX=0DF1 SP=FFFE BP=091E SI=0100 DI=FFFE IP=0100
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:04 , Processed in 0.024411 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表