gpt4 book ai didi

windows - 调整示例 DLL 代码时获取无效图像

转载 作者:可可西里 更新时间:2023-11-01 11:45:27 25 4
gpt4 key购买 nike

我使用示例代码从 FASM 示例目录创建一个简单的 DLL,并根据我的需要对其进行调整。但是,当我进行一些(从我的 POV 来看是无辜的)更改时,生成的二进制文件被损坏 - 运行使用此库的 exe 会产生错误代码 0xC000007B 又名 INVALID_IMAGE_FORMAT。

动态链接库代码:

; DLL creation example

format PE GUI 4.0 DLL
entry DllEntryPoint

include 'win32a.inc'

section '.text' code readable executable

proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
mov eax,TRUE
ret
endp

proc ShowErrorMessage hWnd,dwError
local lpBuffer:DWORD
lea eax,[lpBuffer]
invoke FormatMessage,FORMAT_MESSAGE_ALLOCATE_BUFFER+FORMAT_MESSAGE_FROM_SYSTEM,0,[dwError],LANG_NEUTRAL,eax,0,0
invoke MessageBox,[hWnd],[lpBuffer],NULL,MB_ICONERROR+MB_OK
ret
endp

proc ShowLastError hWnd
ret
endp

section '.idata' import data readable writeable

library kernel,'KERNEL32.DLL',\
user,'USER32.DLL'

import kernel,\
GetLastError,'GetLastError',\
SetLastError,'SetLastError',\
FormatMessage,'FormatMessageA',\
LocalFree,'LocalFree'

import user,\
MessageBox,'MessageBoxA'

section '.edata' export data readable

export 'DLL.DLL',ShowErrorMessage,'ShowErrorMessage',ShowLastError,'ShowLastError'

section '.reloc' fixups data readable discardable

可执行代码:

format PE GUI 4.0
entry start

include 'win32a.inc'

section '.text' code readable executable

start:
jmp ShowLastError

section '.idata' import data readable writeable

library mydll,'DLL.DLL'

import mydll,\
ShowLastError,'ShowLastError'

当我改变时,比如说,

export 'DLL.DLL',ShowErrorMessage,'ShowErrorMessage',ShowLastError,'ShowLastError'

线到

export 'DLL.DLL',ShowLastError,'ShowLastError'

代码中断。如果我将 ShowErrorMessage 主体更改为 ret,也会发生同样的情况。

我对此完全感到困惑。这是 FASM 错误,还是我做错了什么?

最佳答案

我找不到对此的解释,但至少我找到了解决方法。更改以下行

section '.reloc' fixups data readable discardable

只是

data fixups
end data

解决了这个问题。

关于windows - 调整示例 DLL 代码时获取无效图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46810589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com