Sboy 发表于 2024-4-17 11:07:01

如何找到dll 文件位置



问题描述:OD中查看 内存布局, 如何确定内存布局中, 系统模块   kernel32.dll在本机的具体文件目录, ( 直接本地搜索文件的话有好多目录都有kernel32.DLL)

FishC 发表于 2024-4-17 11:07:13

要确定系统模块 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:18:58

本帖最后由 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]
查看完整版本: 如何找到dll 文件位置