提问人:Antoine Hazebrouck 提问时间:11/23/2022 更新时间:11/23/2022 访问量:64
无法获取从 msvcrt.dll 导出的内部 CRT 函数的地址
Couldn't get the address of internal CRT functions exported from the msvcrt.dll
问:
我目前正在做一个个人项目:一个 32 位 PE 加载器。
我做了很多研究,并遵循了一些非常有趣的教程,例如:
https://bidouillesecurity.com/tutorial-writing-a-pe-packer-part-1/
https://0xrick.github.io/win-internals/pe8/#initparse
很快,我的项目的主要目标是将 32 位 PE 加载并执行到内存中。
为此,我完成了以下步骤:
- 分配相当于我的 32 位 PE 的图像大小 (SizeOfImage) 的内存量(在我的情况下为 calc.exe)
- 在内存中加载我的 PE 的标头
- 在内存中加载我的 PE 的部分
- 加载我的 PE 使用的 dll 函数
- 执行搬迁
- 在每个部分上设置正确的权限
- 执行我的 PE 的入口点
我点击了上面的两个链接,但是我收到一个错误,我无法运行calc.exe(“C:\Windows\SysWOW64\calc.exe”)。
经过几个小时的调查,我意识到我无法获取从 msvcrt.dll 导出的几个函数的地址。事实上,GetProcAddress 函数向我返回了其中三个的错误代码 127。他们来了:
- __p__fmode
- __p__commode
- _except_handler4_common
多亏了 Microsoft 文档,我意识到这些函数是内部 CRT 函数和函数宏。我不得不承认,我没有完全理解它们的用途,以及是否与我的问题有真正的联系。
来源:https://learn.microsoft.com/en-us/cpp/c-runtime-library/internal-crt-globals-and-functions?view=msvc-170
PS:我在 Windows 11 下,我在 Visual Studio 2022 上编码,我没有更改默认编译选项。
答: 暂无答案
评论
calc.exe
msvcrt.dll
GetProcAddress