如何找到dll 文件位置
问题描述:OD中查看 内存布局, 如何确定内存布局中, 系统模块 kernel32.dll在本机的具体文件目录, ( 直接本地搜索文件的话有好多目录都有kernel32.DLL)
要确定系统模块 kernel32.dll 在本机的具体文件目录,可以使用Python中的ctypes库来实现。ctypes是一个强大的外部函数库调用模块,它允许Python程序直接调用DLL文件中的函数。
下面是一段使用ctypes库查找kernel32.dll文件位置的示例代码:
import ctypes
# 加载kernel32.dll
kernel32 = ctypes.WinDLL('kernel32.dll')
# 调用GetModuleHandleA函数获取kernel32.dll的句柄
kernel32_handle = kernel32.GetModuleHandleA('kernel32.dll')
# 创建存储文件路径的缓冲区
buffer = ctypes.create_string_buffer(256)
# 调用GetModuleFileNameA函数获取kernel32.dll的文件路径
kernel32.GetModuleFileNameA(kernel32_handle, buffer, 256)
# 输出文件路径
print(buffer.value.decode('gbk'))
通过上述代码,可以找到kernel32.dll在本机的具体文件路径,并将其打印出来。
需要注意的是,这里使用的是Windows操作系统下的相关函数和库,因此上述代码只适用于Windows环境。如果你使用的是其他操作系统,就需要针对不同的系统做相应的处理。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 本帖最后由 jackz007 于 2024-4-17 11:49 编辑
和可执行文件一样,先找当前目录(exe 文件所在目录),再按照 PATH 环境变量顺序进行查找,找到为止。
import os
print()
print(' ' * 8 + '请在 exe 文件所在目录运行\n')
fn = input(' ' * 8 + '输入 dll 文件名:')
if fn :
c = 0
if len(fn) > 4 and fn[-4 :] . lower() != '.dll' :
fn += '.dll'
kx = fn
if os . path . exists(kx) and os . path . isfile(kx):
c += 1
else :
for xs in os . getenv('PATH') . split(';') :
kx = xs + fn if xs[-1] == '\\' else xs + '\\' + fn
if os . path . exists(kx) and os . path . isfile(kx) :
c += 1
break
print(' ' * 8 + kx) if c else print(' ' * 8 + '[抱歉]:没有找到。')
在 exe 文件所在目录内运行此代码就可以知道究竟用的是哪一个 dll 文件。
页:
[1]