如何调用DLL的非导出函数?

如何调用DLL的非导出函数?,dll,reverse-engineering,Dll,Reverse Engineering,我需要调用(获取)一个DLL的非导出函数。与PE导出表不同,非导出表没有任何包含这些项的表。此外,像IDAPro和其他调试器这样的所有反汇编程序只显示带有修饰名称的导出函数名(在IDA的情况下,在Shift+F3之后),并显示所有其他函数,如sub_000FF类 知道如何以编程方式获取和调用DLL的非导出函数吗?(GetProcAddressafterLoadLibrary仅调用非为非导出而设计的修饰导出函数。)使用DIA SDK后,我自己解决了这个问题 我从那里收集了函数地址,然后通过汇编程序

我需要调用(获取)一个
DLL
的非导出函数。与PE导出表不同,非导出表没有任何包含这些项的表。此外,像IDAPro和其他调试器这样的所有反汇编程序只显示带有修饰名称的导出函数名(在IDA的情况下,在Shift+F3之后),并显示所有其他函数,如sub_000FF类


知道如何以编程方式获取和调用
DLL
的非导出函数吗?(
GetProcAddress
after
LoadLibrary
仅调用非为非导出而设计的修饰导出函数。)

使用DIA SDK后,我自己解决了这个问题

我从那里收集了函数地址,然后通过汇编程序,我可以直接调用函数。
谢谢大家的评论

您如何知道需要调用的函数(原型)。是否有源代码?实际上,为了进行调用,DLL需要所有未导出函数的函数签名(原型)本身。我正在编写一个调试器实用程序,它需要调用和测试这些未导出的函数。对于调用,我们需要知道函数签名(所需的in/out参数),在调用之前导出的函数总是被取消修饰(因为我们知道它们的地址,在取消修饰之后,我们会得到完整的签名),对于未导出的函数,我们不知道这些函数在哪里,此外,它们没有装饰,也没有放在任何表(例如导出表)中。了解函数签名(原型)是第一步,让它们调用是第二步。这就是为什么我们首先需要所有未导出的函数签名。但是您真的需要知道原型吗?DLL使用stdcall调用约定,因此清除了它们自己的堆栈(它们“知道”它们得到了多少参数)FARPROC-WINAPI-proc=GetModuleHandle(“mylib”)+@Usman:您似乎混淆了主题。DLL不需要原型,C和类似语言需要原型来编译。dll实际上不再具有该信息。DLL通常还会内联/删除未导出的函数,因此它们可能不存在,无法直接调用。他使用了调试数据库中的
*.pdb
文件。它始终可用,特别是对于生产程序(非调试)