【发布时间】:2017-11-30 09:19:40
【问题描述】:
一个可执行文件可能使用CreateFileA从磁盘打开一个文件
我想做的是覆盖来自kernel32.dll的调用
并给它stdin/stdout HANDLE
我能做什么:
- 给它我的
winmm.dll,因为它会从中加载timeGetTime以获得时间
当我试图在我的 DLL 中覆盖 CreateFileA 调用时,编译器只是不让我编译,因为 kernel32.dll 已经有它的引用
winmm.cpp(56): warning C4273: 'CreateFileA': inconsistent dll linkage
C:\Program Files (x86)\Windows Kits\8.1\Include\um\fileapi.h(122): note: see previous definition of 'CreateFileA'
有没有办法让我制作的 DLL 做到这一点?
PS:我不太了解汇编,但这是程序扫描我作为参数提供的文件时的反汇编
【问题讨论】:
-
使用正确的 c++ 并将
std::basic_ostream传递给您的代码...现在您可以写入文件、标准输出或字符串... -
我不是文件的来源。我只想将标准输入/标准输出句柄传递给它以制作包装器。
-
拦截另一个进程对操作系统的调用是一个高级主题。这个问题可能超出了 Stack Overflow 格式的范围。
标签: c++ dll overloading dll-injection overriding