03.2 脱壳相关的重要函数介绍学习材料.pdfVIP

03.2 脱壳相关的重要函数介绍学习材料.pdf

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
脱壳相关的重要函数介绍 1.GetModuleHandle 函数 如果文件已经被映射进了调用进程的地址空间,则此函数返回指定模块的句柄, HMODULE GetModuleHandle( LPCTSTR lpModuleName // 需要返回句柄的模块名的地址 ); 参数: lpModuleName 指向一个包含模块名字的以 0 结尾的串(或者是 a .DLL 或者.EXE 文件).如 果函数扩展名省略掉,默认为库文件扩展名.DLL。文件名串可以尾部可以是一个点(.) ,指 明模块没有扩展名。该串不必指定路径。当指定路径时务必用反斜杠(\), 而不是正斜杠 (/). 名字与映射进进程地址空间的模块比较。如果此参数为空 NULL, GetModuleHandle 返 回创建调用进程的文件句柄。 返回值: 如果函数成功调用,返回值是指定模块的句柄。如果函数失败,返回 NULL.要得到更进一 步的错误信息,调用 GetLastError 函数。 备注: 返回的句柄不是全局的,可继承的或者可复制的,它不可以被另外的进程使用。 由GetModuleHandle 和 LoadLibrary 返回的句柄可以在同一个函数内使用(例如 GetProcAddress, FreeLibrary, 或者 LoadResource )吗?两个函数之间的区别在于引用次数 (reference count )。LoadLibrary 把模块映射进调用进程的地址空间内,映射进地址空间 后,如果必要,则增加模块的引用次数。 然而 GetModuleHandle 却是在不增加引用次数 的情况下返回已映射模块的句柄。 注意:引用次数被 FreeLibrary 用来决定是否把一个函数从进程地址空间释放掉。由于这个 原因,当把由 GetModuleHandle 返回的句柄用于 FreeLibrary 时,必须小心,因为如此以 来可能导致一个 DLL 模块被提前释放掉。 在多线程应用里,要小心使用这个函数。因为在一个函数返回句柄和另一个函数使用句柄 期间,无法保证模块句柄保持有效。比如一个线程可能通过 GetModuleHandle 提取模块句 柄。在线程于某个函数内使用句柄之前,第二个线程可能释放了句柄,系统可能加载了另 一个模块,而且给它赋予和刚释放的模块相同的句柄值。 第一个线程则被留下一个引用了 不同模块的句柄,此模块并非它想要的那个模块。 2. GetProcAddress 函数 GetProcAddress 函数返回指定的输出动态链接库内的函数地址。 FARPROC GetProcAddress( HMODULE hModule, // DLL 模块句柄 LPCSTR lpProcName // 函数名 ); 参数: (1)hModule Handle 是包含函数的 DLL 模块的句柄。该句柄由 LoadLibrary 或 GetModuleHandle 返回。 (2 )lpProcName 指向以 0 结尾的函数名字符串,或者指定函数的序号值。如果参数是序号值,必须出现在 低字部分,高字部分置 0。 返回值: 如果函数成功,返回 DLL 输出函数的地址。如果失败,返回 NULL.得到更多错误信息,使 用 GetLastError 函数. 备注: GetProcAddress 函数用来提取在 DLL 内的输出函数的地址。由lpProcName 指向的函数名 的拼写和大小写必须与 DLL 模块定义文件(.DEF) 的 EXPORTS 声明的函数一致。Win32 API 函数的输出名也许与你代码内调用的函数名不一样。这些差异被SDK 头文件内使用的宏隐 藏起来了。 lpProcName 参数可以通过指定一个函数序号(在输出声明中关联到一个函数上)来表明一 个 DLL 函数。GetProcAddress 校验指定的序号是否在.DEF 文件声明的从 1 和最高序号值 之间。 然后函数使用序号作为索引从一个函数表内读取函数地址。如果.DEF 文件没有对 函数连续从 1 到 N 编号的话,错误产生了,该函数返回一个无效的非 0 地址,即使没有函 数使用指定的序号。在函数不操作的情况下,函数必须以名字指出而非序号。 3.LoadLibrary 函数 LoadLibrary 函数把指定的可执行模块映射进调用进程的地址空间。 HINSTANCE LoadLibrary( LPCTSTR lpLibFileName //可执行模块的文件名 ); 参数: lpLibFileName 是指向以 0 结尾的字符串命名的可执行模块。

文档评论(0)

yjz0327 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档