Articles of DLL

Visual C ++ – 重写从DLL导入的函数?

我想覆盖kernel32.dll中的特定function。 是否有可能在静态库中重新定义该函数,并强制执行该静态库中的可执行文件? 我想不同的联系可能会成为一个问题。 这将是可以用我自己的自定义DLL覆盖它。 然而,问题是DLL本身需要链接到kernel32.dll,所以它忽略了我对该函数的定义。 编辑:我得到它与我自己的DLL工作。 在构build时,链接时间码生成需要被禁用。 那么静态链接重写的函数呢?

代理DLL中无法parsing的外部符号

我正在尝试构build“Version.dll”的代理DLL,但仍然遇到与导出的函数有关的错误。 00000000 characteristics 4A5BC9E3 time date stamp Tue Jul 14 05:27:23 2009 0.00 version 1 ordinal base 15 number of functions 15 number of names ordinal hint RVA name 1 0 00001B14 GetFileVersionInfoA 2 1 00001E40 GetFileVersionInfoByHandle 3 2 0000193C GetFileVersionInfoExW 4 3 00001AB4 GetFileVersionInfoSizeA 5 4 000014E8 GetFileVersionInfoSizeExW 6 5 000015FC GetFileVersionInfoSizeW 7 6 […]

无法在DLL中查找过程

为什么不能在dll中find指定的程序? 我有一个为Windows x86编译的my.dll库(操作系统是Windows 7 x64;但是我使用的是Go x86二进制文件 – LiteIDE – 而C#代码也是针对x86体系结构进行了显式编译的)。 我从C#使用它,它的工作原理: [DllImport("my.dll", EntryPoint = "my_function")] public static extern double my_function(double x); 但是,当我尝试使用它(在这里我试图find它)​​从通过: var ( dllMine = syscall.NewLazyDLL("my.dll") my_function = dllMine.NewProc("my_function") ) func main() { err := my_function.Find() if err != nil { fmt.Println(err) return } //… } 它说Failed to find my_function procedure in my.dll: The […]

SWT在Windows上写入DLL文件在哪里?

我无法在互联网上findSWT试图写入dll文件的地方。 我有一台计算机,因为SWT无法写入DLL,所以jar不运行。 更新1 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.sun.javaws.Launcher.executeApplication(Unknown Source) at com.sun.javaws.Launcher.executeMainClass(Unknown Source) at com.sun.javaws.Launcher.doLaunchApp(Unknown Source) at com.sun.javaws.Launcher.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: no swt-win32-3738 in java.library.path no swt-win32 in java.library.path Can't load library: \\ubz01fst\Students\User2010\Com\xxx\swt-win32-3738.dll Can't load library: […]

加载一个DLL不止一次?

我正在使用LoadLibrary函数在Windows中加载DLL。 我的问题是这样的:如果我为同一个DLL不止一次地调用这个方法,我得到了不同的DLL实例的句柄,还是都会引用同一个实例? 另外,这种行为与Linux SO文件是如何相关的,是相同的还是完全不同的,在这方面我能做些什么假设? 谢谢。

可以在Linux上使用.dll

问题:是否可以使用.dll文件在Linux上编译程序? 这是怎么回事:这个.dll将被用来写第三方的一些专有软件的PHP扩展。 背景和研究: 我有一个名为proprietary.lib的库。 我很好奇,因为我从来没有见过.lib扩展名,所以我input: file proprietary.lib 输出是: proprietary.lib: current ar archive 我做了一些研究,发现ar是或多或less的tar (事实上​​,我猜tar已经在大多数* nix环境中取代了ar )。 在检查ar页时,我看到了t option ,它显示了该存档内容的表格列表。 凉。 所以我input: ar t proprietary.lib 并得到: proprietary.dll proprietary.dll … (snip X lines) …

.so在linux下注入:如何查找dlopen()的地址?

最近我对Linux感兴趣,正在尝试创build一个能够注入共享对象(即.so文件,“dynamic加载库”,Windows下的“DLL”)的程序。我知道这可以通过设置一个环境variables,但我想要在已经运行的进程上执行。 我已经知道如何在Windows下做到这一点。 有几种方法,但一般来说,您可以通过使用CreateRemoteThread()创build远程线程来调用LoadLibrary()。 当然你需要在远程进程中使用LoadLibrary的地址,但是(以我的经验),每个进程的偏移总是相同的。 我已经做了一些关于如何在Linux下完成的研究。 例如Phrack 59中一篇有趣的文章展示了如何做到这一点。 文章也有一个源代码附加,但由于一些假设是由目标进程,它是32位,我不能得到它的工作。 其他的东西,我碰到: 一个codeproject文章 ,但这只是解释如何从gdb内做到这一点。 (我会张贴更多的链接,但网站限制我2: – /。) 首先,我想获取远程进程中dlopen()函数的地址。 为此,我想通过获取stream程的ELF头,并遍历符号表。 其实,我设法做到这一点,通过: 1)获取ELF头(根据我的经验,存储在0x400000下的64位) 2)在标题为DYNAMIC的程序标题中find全局偏移量表。 3)通过访问全局偏移表中的第二个条目来获取第一个link_map。 4)迭代link_map链的dynamic部分,从而获得string表,符号表和散列表的地址(* Hash_Table + 0x4保存符号表中的条目数量。) 5)遍历符号表 从我的程序输出一些示例: ** looking at lib "" ** Trying to find symbol main in symbol table… numentries: 49 index 1 name: val: 0 … index 49 name: memcpy val: 0 symbol […]

端口Win32的DLL挂钩到Linux

我有一个程序(NWShader)挂钩到第二个程序的OpenGL调用(NWN)做后处理效果和什么。 NWShader最初是为Windows构build的,通常是现代版本(win32),同时使用DLL导出(以获取Windows加载它并获取一些OpenGL函数)和Detours(挂钩到其他函数)。 我使用的技巧,在检查sysdir之前,Win将在当前目录中查找任何DLL,因此会加载我的。 我有在这个方法redirect的DLL: #pragma comment(linker, "/export:oldFunc=nwshader.newFunc) 将它们发送到我自己的DLL中不同的命名函数。 然后我做任何处理,并从系统DLL调用原来的function。 我需要将NWShader移植到Linux(NWN存在于两种版本中)。 据我所知,我需要做的是共享库(.so文件)。 如果这是在NWN可执行文件(我发现一个shell脚本来处理这个)之前预加载,我的函数将被调用。 唯一的问题是我需要调用原始函数(我会使用各种DLLdynamic加载方法,我认为),需要能够执行类似Detour的内部函数挂钩。 目前,我正在构buildUbuntu 9.10 x64(带有32位编译器标志)。 我在Google上找不到太多帮助,但是我不知道这个* nix社区究竟是指什么的。 我可以编写C ++,但我更习惯于Windows。 作为OpenGL,需要修改与Linux兼容的唯一部分是钩子代码和调用。 有没有一个简单而简单的方法来做到这一点,或者它会涉及重新创buildDetours并dynamic加载原始函数地址?

如何从Linux上的Python调用Wine的DLL?

我正在Linux中编写一个python脚本,并且需要调用Wine中的一些Windows函数。 具体来说就是AllocateAndInitializeSid和LookupAccountSidW和LookupAccountSidW ,以确定谁login到远程Windows计算机。 这些function是葡萄酒中的advapi32.dll的一部分( 编辑 :使用答案,我能够调用的function,但LookupAccountSidW只适用于本地计算机)。 我怎样才能访问这些function,或一般的葡萄酒DLL? 我试过了 >>> cdll.LoadLibrary("~/.wine/drive_c/windows/system32/advapi32.dll") 但是会导致错误: OSError:〜/ .wine / drive_c / windows / system32 / advapi32.dll:无效的ELF标头 有另一种ctypes函数可以工作,或者我可以使用一些葡萄酒界面吗?

更新共享库而不重新启动进程

如果我的进程正在加载一个.so库,并且如果该库的新版本可用,是否可以切换到新的库而不进行进程重启? 或者答案取决于是否有一个参数更改为库中现有的function之一? 我正在一个运行100个进程的漂亮大系统中工作,每个系统加载10个库。 这些库提供了特定的function,由独立的团队提供。 所以当一个库的变化(对于一个错误修复可以说)理想的事情是将其发布在内部而不会影响正在运行的进程。 可能吗 ? 编辑谢谢! 在我的情况下,当一个新的库可用时,所有正在运行的进程必须开始使用它。 它没有select让他们运行旧版本,并在以后拿起新的。 所以看起来更安全的select是重新加载进程。