I have a disassembly engine in 3078 bytes, currently supporting all standard IA-32 instructions (but no MMX, SSE, VMX etc yet). I plan to redesign it at some point to allow the use of symbolic debugging information.
Sample output:
Code:
00401000 mov esi,00401000
00401005 mov edi,00404010
0040100a mov edx,esi
0040100c push edi
0040100d call 00401084
00401012 mov al,20
00401014 stosb
00401015 push edi
00401016 push esi
00401017 mov ebp,00404000
0040101c mov dword ptr [ebp+04],0040103d
00401023 mov [ebp+08],esp
00401026 mov ebx,00000303
0040102b mov cl,05
0040102d push edi
0040102e call 004023bf
00401033 pop edi
00401034 call 0040228a
00401039 pop eax
0040103a pop eax
0040103b jmp 00401046
0040103d pop esi
0040103e pop edi
0040103f inc esi
00401040 mov eax,003f3f3f
00401045 stosd
00401046 mov al,00
00401048 stosb
00401049 pop ecx
0040104a push ecx
0040104b mov al,[ecx]
0040104d sub al,41
0040104f cmp al,1a
00401051 jae 00401056
00401053 add byte ptr [ecx],20
00401056 inc ecx
00401057 cmp ecx,edi
00401059 jb 0040104b
0040105b call dword ptr [00403000]
00401061 pop edi
00401062 cmp esi,004010b0
00401068 jb 00401005
0040106a ret
0040106b push ecx
0040106c push ecx
0040106d shl cl,02
00401070 ror edx,cl
00401072 jmp 00401087
00401074 push ecx
00401075 push +02
00401077 shl edx,18
0040107a jmp 00401087
0040107c push ecx
0040107d push +04
0040107f shl edx,10
00401082 jmp 00401087
00401084 push ecx
00401085 push +08
00401087 pop ecx
00401088 push eax
00401089 rol edx,04
0040108c mov al,dl
0040108e and al,0f
00401090 daa
00401091 cmp al,10
00401093 sbb al,cf
00401095 stosb
00401096 loop 00401089
00401098 pop eax
00401099 pop ecx
0040109a ret
0040109b rep movsb
0040109d clc
0040109e ret
0040109f fld real10 ptr [esp+ebx*8-14]
004010a3 fdivr real4 ptr [0000fedc]
004010a9 fcom real8 ptr gs:[12345678]