怎样获得一个DLL中未vs查看dll导出函数数的地址

【原创】告别硬编码-发个获取未导出函数地址的Dll及源码 - 第 2 页 - 看雪安全论坛
该主题: "【原创】告别硬编码-发个获取未导出函数地址的Dll及源码" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
本站声明:看雪论坛文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者信息及本声明!
注册日期: Mar 2007
现金: 637 Kx
致谢数: 20
获感谢文章数:11获会员感谢数:70
, 11:53:42
看来发帖的多写几个字,我早就发源码,没写几个字优秀,多写几个精华
注册日期: Mar 2008
现金: 71 Kx
致谢数: 13
获感谢文章数:1获会员感谢数:1
, 12:02:49
mark.mark..
注册日期: Apr 2010
现金: 290 Kx
致谢数: 16
获感谢文章数:1获会员感谢数:3
, 12:09:00
最初由 exediy发布
我草,居然精了!!我还以为大家都知道这方法,我跟我的小伙伴们都惊呆了!!
大神飘过,膜拜一下~
注册日期: Sep 2010
现金: 27 Kx
获感谢文章数:0获会员感谢数:0
, 12:33:24
加载符号文件...&不错的方法~
注册日期: Apr 2004
现金: 153 Kx
获感谢文章数:0获会员感谢数:0
, 13:16:54
占坑,招租,备用
注册日期: Mar 2008
现金: 211 Kx
获感谢文章数:0获会员感谢数:0
, 14:08:56
注册日期: Jan 2009
现金: 417 Kx
获感谢文章数:9获会员感谢数:46
, 14:12:31
最初由 exediy发布
我草,居然精了!!我还以为大家都知道这方法,我跟我的小伙伴们都惊呆了!!
高手都知道,一般的都是用硬编码或者暴搜吧,估计版主不是因为方法加精,主要是由于自己写符号文件查找很繁琐,我给个Dll给大家直接调用就方便多了,源码我也给了,主要想有更多的人再增加些功能,能像windbg的符号显示一样就完美了
注册日期: Jan 2009
现金: 417 Kx
获感谢文章数:9获会员感谢数:46
, 14:24:31
还有就是高手握着技术不肯发,网上这方面的资料真的很少,写这个前我百度了半天大概只搜到3、4份源码,而且没一份能在我机子上编译成功的,或者编译成功了导出的结果老是为0,还有就是一些必须的文件基本没人提供,真正完善的资料还只有微软的dbghelp的说明文件,可惜是英文的,可能一般人也不愿意去看。
注册日期: May 2011
现金: 337 Kx
致谢数: 10
获感谢文章数:2获会员感谢数:7
, 14:42:58
最初由 organic发布
高手都知道,一般的都是用硬编码或者暴搜吧,估计版主不是因为方法加精,主要是由于自己写符号文件查找很繁琐,我给个Dll给大家直接调用就方便多了,源码我也给了,主要想有更多的人再增加些功能,能像windbg的符号显示一样就完美了
dbghelp.dll&加一个回调就可以搞定,目测代码数不超过20行.
windbg其实也只是调用dbghelp而已.用dbghelp下载符号文件,再用dbghelp去解析.20行代码足够鸟.M$标准,而且M$还提供了调用范例.
被 exediy 最后编辑
注册日期: Mar 2007
现金: 637 Kx
致谢数: 20
获感谢文章数:11获会员感谢数:70
, 14:57:46
最初由 organic发布
还有就是高手握着技术不肯发,网上这方面的资料真的很少,写这个前我百度了半天大概只搜到3、4份源码,而且没一份能在我机子上编译成功的,或者编译成功了导出的结果老是为0,还有就是一些必须的文件基本没人提供,真正完善的资料还只有微软的dbghelp的说明文件,可惜是英文的,可能一般人也不愿意去看。
/showthread.php?t=161246&导出所有未导出函数变量,本论坛就有啊
注册日期: Feb 2007
现金: 199 Kx
致谢数: 499
获感谢文章数:0获会员感谢数:0
, 16:52:53
暂时看不懂哦,先支持了再说啊
注册日期: Jul 2007
现金: 114 Kx
获感谢文章数:0获会员感谢数:0
, 17:04:25
最初由 exediy发布
我草,居然精了!!我还以为大家都知道这方法,我跟我的小伙伴们都惊呆了!!
dbghelp.dll&加一个回调就可以搞定,目测代码数不超过20行.
windbg其实也只是调用dbghelp而已.用dbghelp下载符号文件,再用dbghelp去解析.20行代码足够鸟.M$标准,而且M$还提供了调用范...
同问&这样都可加精?
msdn上关于dbghelp的资料不少吧?
被 skyercao 最后编辑
注册日期: Mar 2013
现金: 66 Kx
获感谢文章数:0获会员感谢数:0
, 19:48:02
我正在找这资料你就发了。。。。。。怎么这样呢
注册日期: Sep 2005
现金: 356 Kx
获感谢文章数:0获会员感谢数:0
, 20:02:16
注册日期: Nov 2005
现金: 199 Kx
获感谢文章数:0获会员感谢数:0
, 09:06:56
该主题: "【原创】告别硬编码-发个获取未导出函数地址的Dll及源码" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
您不可以发表主题
您不可以回复帖子
您不可以上传附件
您不可以编辑自己的帖子
论坛论坛启用
用户控制面板
会员在线状态
『看雪众测/众包』
『Android 安全』
『iOS安全』
『求助问答』
『经典问答』
『资料导航』
『软件调试逆向』
『编程技术』
『加壳与脱壳』
『资源下载』
『WEB安全』
『漏洞分析』
『密码学』
『外文翻译』
『CrackMe&ReverseMe』
『招聘专区』
『职业生涯』
『15PB培训』
『麦洛克菲培训』
『茶余饭后』
『安全资讯』
『论坛活动』
6)PEDIY Crackme竞赛2009
7)看雪十周年专版
8)腾讯公司2010软件安全竞赛
9)2011 Exploit Me竞赛
『图书项目版』
《加密与解密(第三版)》
《C++反汇编与逆向分析技术揭秘》
《Android软件安全与逆向分析》
『论坛版务』
所有时间均为北京时间, 现在的时间是 .
&&& 看雪学院()
| 提供带宽资源
|&微信公众帐号:dll的导出函数(转载)
我的图书馆
dll的导出函数(转载)
1.导出函数名的问题
dll导出函数最简单的语法是
void__declspec(dllexport) fun();
由于它默认的是c++的调用约定cdecl,因此导出的函数就变成了
?fun@@YAXXZ
如果直接取函数名fun,就会找不到函数,有两种方法可以解决这个问题:用C的编译方式和def文件
① 用C的编译方式
在导出函数前声明extern “C”,即:
extern “C” void__declspec(dllexport) fun();
加入extern “C”是告诉编译器,用C的编译方式生成文件,不需要加入参数作为修饰
② Def文件
在project中建立一个def文件,写入
LIBRARY "testDLL"// testDLL是project的名字
EXPORTS //输出
fun //函数名(也可以带序号的输出函数名fun@1)
extern “C” void__declspec(dllexport) 和在def文件中导出函数的作用是一样的,因此没必要都写在工程中。
Ps,如果导出的函数名带一些修饰,如:?fun@@YAXXZ,用GetProcAddress()函数直接调用”也是可以找到函数的。
2. 修饰函数的关键字
stdcall cdecl fastcall thiscall naked call
这些调用约定决定了:
? 参数传递次序
? 调用堆栈由谁(调用函数或被调用函数)清理
? 导出函数名
导出函数的调用约定和使用这个函数时声明的调用约定必须一致,否则程序会崩溃。
在C和C++中默认的调用约定是,上面函数完整的修饰就是:
void__declspec(dllexport) fun();
但是windows系统用的回调函数一般都是_stdcall。
下面是各个调用约定详细的解释:
是Pascal方式清理C方式压栈,通常用于Win32 Api中,函数采用从右到左的压栈方式, 自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。
int f(void *p) --&& _f@4(在外部汇编语言里可以用这个名字引用这个函数)
C调用约定(即用关键字说明)(The C default calling convention)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数vararg的函数(如printf)只能使用该调用约定)。
另外,在函数名修饰约定方面也有所不同。 _cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。VC将函数编译后会在函数名前面加上下划线前缀。
调用的主要特点就是快,因为它是通过寄存器来传送参数的(实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),
在函数名修饰约定方面,它和前两者均不同。__fastcall方式的函数采用寄存器传递参数,VC将函数编译后会在函数名前面加上"@"前缀,在函数名后加上"@"和参数的字节数。
仅仅应用于“C++”成员函数。this指针存放于CX/ECX寄存器中,参数从右到左压。thiscall不是关键词,因此不能被程序员指定。
naked call
当采用1-4的调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。
(这些代码称作 prolog and epilog code,一般,ebp,esp的保存是必须的).
但是naked call不产生这样的代码。naked call不是类型修饰符,故必须和_declspec共同使用。
另外,关键字 __stdcall、__cdecl和__fastcall可以直接加在要输出的函数前。它们对应的命令行参数分别为/Gz、/Gd和/Gr。缺省状态为/Gd,即__cdecl。
发表评论:
TA的最新馆藏[转]&[转]&[转]&君,已阅读到文档的结尾了呢~~
通过符号表找到系统未导出的函数地址源码,查看dll导出函数,dll导出函数,查看so导出函数,dll导出函数查看器,导出函数,查看lib导出函数,mysql 导出函数,c 导出函数,mfc dll 导出函数
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
通过符号表找到系统未导出的函数地址源码
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口DLL中有个没有导出的函数,被LoadLibrary加载后,怎么计算它在进程中的地址 - VC/MFC当前位置:& &&&DLL中有个没有导出的函数,被LoadLibrary加载后,怎DLL中有个没有导出的函数,被LoadLibrary加载后,怎么计算它在进程中的地址&&网友分享于:&&浏览:25次DLL中有个没有导出的函数,被LoadLibrary加载后,如何计算它在进程中的地址?DLL中有个没有导出的函数,被LoadLibrary加载后,如何计算它在进程中的地址?谢谢。------解决方案--------------------LoadLibrary 成功后,返回的句柄就是DLL映射到进程中的地址
------解决方案--------------------这个没有标准的方法有利用符号文件的,有利用重定位表的,有搜索特征码的
------解决方案--------------------
是个问题。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 vc dll 导出函数 的文章

 

随机推荐