[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 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

评分人数

    • CrLf: 感谢补充!技术 + 1

TOP

参考一贴中汇总的帖子内容,其实在 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 "+!"
复制代码

TOP

本帖最后由 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
复制代码

TOP

回复 17# email10t


来个 4 字节的,仅能保存为gb2312编码:
  1. AA帻
复制代码
反汇编:
  1. inc cx
  2. inc cx
  3. loopnz 0101h
复制代码
既然都作弊了,索性再来一个 2 字节的:
复制代码
反汇编:
  1. jmp 0100h
复制代码

TOP

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

评分人数

TOP

来个构思详解:
---------------------------------------------------------------------------
臭不要脸 ...
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
复制代码

TOP

回复 21# email10t


    ZR 和 PE 是怎么测试得到的?

TOP

本帖最后由 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!`"
复制代码

TOP

看来 Hello World 程序可能是这样:用的是 emu8086 编译的:
email10t 发表于 2015-5-17 19:30


有没有更短的 ascii assembly ?

TOP

本帖最后由 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!$'
复制代码

TOP

本帖最后由 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

评分人数

    • CrLf: 感谢补充!技术 + 1

TOP

回复 26# email10t


感谢补充
jnle 等同 jg,其实按理也在可见字符范围内,不过 0x7f 确实是特例,给忘了,谢谢提醒

TOP

这类代码过时了

TOP

回复 28# email10t


    嗯,64位系统不支持,已经退出历史舞台了

TOP

寄存器是有初始状态是这样的:
  1. AX=0000 BX=0000 CX=00FF DX=0DF1 SP=FFFE BP=091E SI=0100 DI=FFFE IP=0100
复制代码

TOP

返回列表