从exe文件中获取汇编级代码?

时间:2013-08-27 13:20:37

标签: assembly

我正在进行linux汇编编程,过去几天我已经转而学习windows汇编编程。我使用ml作为我的汇编程序,golink作为我的链接器。我有汇编代码,并从中获取了exe。现在我需要像\xff\xab\x55那样取回它的十六进制等等。在linux中,我使用了objdump -d elf_executablexxd -i file。它的窗户相当于什么?
修改 我需要提一下,使用windows上的objdump我收到以下错误

C:\Arena>objdump -d a.exe                                                                                                                                                 
objdump: a.exe: File format not recognized

编译后
C:\Arena>ml a.asm
Microsoft (R) Macro Assembler Version 10.00.30319.01                                                                                                                      
Copyright (C) Microsoft Corporation.  All rights reserved.                                                                                                                

 Assembling: a.asm  
C:\Arena>golink a.obj kernel32.dll user32.dll                                                                                                                             

GoLink.Exe Version 0.26.14 - Copyright Jeremy Gordon 2002/9 - JG@JGnet.co.uk                                                                                              
Output file: a.exe                                                                                                                                                        
Format: win32 size: 1,536 bytes

4 个答案:

答案 0 :(得分:5)

如果安装了Visual Studio,则可以使用DUMPBIN

dumpbin /DISASM /out:log.txt file.exe

答案 1 :(得分:3)

我之前使用过 dumppe.exe 程序进行反汇编。

输入;

where dumppe
对我来说, dumppe.exe ml.exe 位于同一目录中; MASM32 \ BIN \ dumppe.exe

粗略拆卸你可以进入;

dumppe -quiet -disassem [file-name-here]

或者你可以进入;

dumppe -quiet -disassem:![lable-here] [file-name-here]

或者有关详情,请在cmd提示符下键入“ dumppe ”。

我的Windows上还安装了grep的Windows版本,当我使用cmd时

dumppe -disassem -quiet win.exe | grep -A10 start:

我明白了;

00401000                    start:
00401000 6A00                   push    0
00401002 680F304000             push    offset off_0040300F     ; 'program statment!!!',000h
00401007 6800304000             push    offset off_00403000     ; 'hello world!!!',000h
0040100C 6A00                   push    0
0040100E E80D000000             call    jmp_MessageBoxA
00401013 6A00                   push    0
00401015 E800000000             call    jmp_ExitProcess

0040101A                    jmp_ExitProcess:            ; Xref 00401015
0040101A FF2500204000           jmp     dword ptr [ExitProcess]

当我使用 objdump 时的比较

objdump -M intel -D win.exe | grep -A10 text.:

几乎相同
objdump -M intel -d win.exe

我明白了;

00401000 <.text>:
  401000:       6a 00                   push   0x0
  401002:       68 0f 30 40 00          push   0x40300f
  401007:       68 00 30 40 00          push   0x403000
  40100c:       6a 00                   push   0x0
  40100e:       e8 0d 00 00 00          call   0x401020
  401013:       6a 00                   push   0x0
  401015:       e8 00 00 00 00          call   0x40101a
  40101a:       ff 25 00 20 40 00       jmp    DWORD PTR ds:0x402000
  401020:       ff 25 08 20 40 00       jmp    DWORD PTR ds:0x402008

答案 2 :(得分:1)

您可以在Windows上安装objdump,安装MinGW,它随附在其他工具中:

> dir /b \MinGW\bin
addr2line.exe
ar.exe
as.exe
c++.exe
c++filt.exe
cc.exe
cpp.exe
dlltool.exe
dllwrap.exe
elfedit.exe
g++.exe
gcc.exe
gcov.exe
gdb.exe
gdbserver.exe
gprof.exe
ld.bfd.exe
ld.exe
libexpat-1.dll
libgcc_s_dw2-1.dll
libgmp-10.dll
libgomp-1.dll
libiconv-2.dll
libintl-8.dll
libmpc-2.dll
libmpfr-1.dll
libquadmath-0.dll
libssp-0.dll
libstdc++-6.dll
mingw-get.exe
mingw-get.exe~
mingw32-c++.exe
mingw32-cc.exe
mingw32-g++-4.6.2.exe
mingw32-g++.exe
mingw32-gcc-4.6.2.exe
mingw32-gcc.exe
mingw32-make.exe
mingwm10.dll
nm.exe
objcopy.exe
objdump.exe
pkginfo.exe
pthreadGC2.dll
quserex-test.exe
ranlib.exe
readelf.exe
size.exe
strings.exe
strip.exe
windmc.exe
windres.exe

>

Download并安装,然后设置环境变量,请参阅Environment Settings页面上的Getting Started部分。

答案 3 :(得分:0)

如果您不介意这些工具仅使用GUI(afaik), 查看 IDA Pro (静态), OllyDbg (动态),它们会显示说明和操作码。