使用 MASM 组装 IDA 输出 - “文件超出行限制”和“不允许使用指令前缀”

问题描述

使用 MASM 从 IDA 编译导出的程序集时,出现以下两个错误

test.exe.asm(32767) : Fatal error A1019: invalid debug and browser data; file exceeds line limit

test.exe.asm(2697) : error A2068: instruction prefix not allowed

这是触发最后一个错误代码

mov     eax,ds:dword_40D028
test    eax,eax
jz      short loc_401D40
rep retn                     <----- Line 2697

首先:这些错误是怎么发生的?原来的 .exe 工作正常。显然反汇编不能产生准确的原始程序集,但它至少应该产生工作代码,不是吗?

其次:我该如何解决这个问题?

编辑:尝试使用 JWASM 编译程序集时,我不再遇到超出行数限制的错误,而是出现以下错误

test.exe.asm(40764) : Error A2150: Missing operator in expression
test.exe.asm(40767) : Error A2150: Missing operator in expression
test.exe.asm(40768) : Error A2150: Missing operator in expression
test.exe.asm(40769) : Error A2150: Missing operator in expression
test.exe.asm(40772) : Error A2150: Missing operator in expression
test.exe.asm(40773) : Error A2150: Missing operator in expression
test.exe.asm(40774) : Error A2150: Missing operator in expression
test.exe.asm(40777) : Error A2150: Missing operator in expression
test.exe.asm(40778) : Error A2150: Missing operator in expression
test.exe.asm(40779) : Error A2150: Missing operator in expression
test.exe.asm(40782) : Error A2150: Missing operator in expression
test.exe.asm(40783) : Error A2150: Missing operator in expression
test.exe.asm(40815) : Error A2150: Missing operator in expression
test.exe.asm(40816) : Error A2150: Missing operator in expression
test.exe.asm(40817) : Error A2150: Missing operator in expression
test.exe.asm(40818) : Error A2150: Missing operator in expression
test.exe.asm(40819) : Error A2150: Missing operator in expression
test.exe.asm(40820) : Error A2150: Missing operator in expression
test.exe.asm(40821) : Error A2150: Missing operator in expression
test.exe.asm(40822) : Error A2150: Missing operator in expression
test.exe.asm(40823) : Error A2150: Missing operator in expression
test.exe.asm(40824) : Error A2150: Missing operator in expression
test.exe.asm(40825) : Error A2150: Missing operator in expression
test.exe.asm(40826) : Error A2150: Missing operator in expression
test.exe.asm(40827) : Error A2150: Missing operator in expression
test.exe.asm(40828) : Error A2150: Missing operator in expression
test.exe.asm(40829) : Error A2150: Missing operator in expression
test.exe.asm(40830) : Error A2150: Missing operator in expression
test.exe.asm(40831) : Error A2150: Missing operator in expression
test.exe.asm(40832) : Error A2150: Missing operator in expression

这是从第 40759 行开始的代码包括注释)

; Segment type: Pure data                        <----- Line 40759
; Segment permissions: Read
imports         segment para public 'DATA' use32
                assume cs:imports
                ;org 40E000h
__IMPORT_DESCRIPTOR_kernel32 dd rva off_40E098 ; Import Name Table
                dd 0                    ; Time stamp
                dd 0                    ; Forwarder Chain
                dd rva aKernel32Dll     ; DLL Name
                dd rva AllocConsole     ; Import Address Table
__IMPORT_DESCRIPTOR_user32 dd rva byte_40E12C+4 ; Import Name Table
                dd 0                    ; Time stamp
                dd 0                    ; Forwarder Chain
                dd rva aUser32Dll       ; DLL Name
                dd rva MessageBoxA      ; Import Address Table
__IMPORT_DESCRIPTOR_msvcrt dd rva byte_40E13C+4 ; Import Name Table
                dd 0                    ; Time stamp
                dd 0                    ; Forwarder Chain
                dd rva aMsvcrtDll       ; DLL Name
                dd rva printf           ; Import Address Table
__IMPORT_DESCRIPTOR_Advapi32 dd rva byte_40E154+4 ; Import Name Table
                dd 0                    ; Time stamp
                dd 0                    ; Forwarder Chain
                dd rva aAdvapi32Dll     ; DLL Name
                dd rva CryptAcquireContextA ; Import Address Table
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
aKernel32Dll    db 'kernel32.dll',0     ; DATA XREF: imports:0040E00C\u2191o
                align 2
aUser32Dll      db 'user32.dll',0       ; DATA XREF: imports:0040E020\u2191o
                align 2
aMsvcrtDll      db 'msvcrt.dll',0       ; DATA XREF: imports:0040E034\u2191o
                align 2
aAdvapi32Dll    db 'Advapi32.dll',0     ; DATA XREF: imports:0040E048\u2191o
                align 4
;
; Import names for kernel32.dll
;
off_40E098      dd rva word_40E170      ; DATA XREF: imports:__IMPORT_DESCRIPTOR_kernel32\u2191o
                dd rva unk_40E180
                dd rva word_40E18E
                dd rva word_40E19E
                dd rva word_40E1AE
                dd rva word_40E1C4
                dd rva word_40E1D6
                dd rva word_40E1E6
                dd rva word_40E1F6
                dd rva word_40E20A
                dd rva word_40E21E
                dd rva unk_40E230
                dd rva unk_40E244
                dd rva word_40E256
                dd rva word_40E26C
                dd rva word_40E280
                dd rva word_40E28E
                dd rva word_40E29E
                dd 0
imports         ends

除此之外,还出现了另一个错误

test.exe.asm(40884) : Error A2209: Syntax error: :
test.exe.asm(40890) : Error A2209: Syntax error: :
test.exe.asm(40897) : Error A2209: Syntax error: :

从第 40882 行开始的代码

                extrn LoadLibraryA:dword <------ line 40882
                extrn CreateThread:dword
                extrn byte_40E12C:byte:0Ch
                                        ; DATA XREF: imports:__IMPORT_DESCRIPTOR_user32\u2191o
;
; Imports from user32.dll
;
                extrn MessageBoxA:dword ; DATA XREF: imports:0040E024\u2191o
                extrn byte_40E13C:byte:10h
                                        ; DATA XREF: imports:__IMPORT_DESCRIPTOR_msvcrt\u2191o
;
; Imports from msvcrt.dll
;
                extrn printf:dword      ; DATA XREF: imports:0040E038\u2191o
                extrn memset:dword
                extrn byte_40E154:byte:10h

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)