c ++受损函数在模块定义文件

时间:2016-01-02 05:58:18

标签: c++ visual-studio-2010 dll dllexport

问题摘要

我在模块定义文件“?Add @ MyMathFuncs @ MathFuncs @@ SANNN @ Z”的exports部分放置的函数符号被导出为“?Add”。

我正在尝试做什么

我想使用DLL重定向来拦截函数调用,而且在拦截C ++函数方面遇到了一些问题。我正在使用https://dl.packetstormsecurity.net/papers/win/intercept_apis_dll_redirection.pdf中指定的方法,在那里我创建一个与我想要拦截的DLL同名的DLL,并将其放在与可执行文件相同的目录中。

对于我的具体情况,我试图拦截来自{的一个简单DLL示例的MathFuncs :: MyMathFuncs :: Add函数(从dumpbin.exe添加@MyMathFuncs @ MathFuncs @@ SANNN @ Z) {3}}。为此,我使用以下信息创建了一个模块定义文件

definitions.txt

LIBRARY dll_redirector.dll

EXPORTS
  ?Add@MyMathFuncs@MathFuncs@@SANNN@Z=myAdd

这里是dll_redirector.cpp(将构建将与可执行文件放在同一文件夹中的dll)。基本上,你可以看到myAdd会用我自己的替换add函数(它基本上什么都不做)

dll_redirector.cpp

#include "stdafx.h"


#pragma comment(linker, "/export:?Divide@MyMathFuncs@MathFuncs@@SANNN@Z=RealMath.?Divide@MyMathFuncs@MathFuncs@@SANNN@Z")
#pragma comment(linker, "/export:?Multiply@MyMathFuncs@MathFuncs@@SANNN@Z=RealMath.?Multiply@MyMathFuncs@MathFuncs@@SANNN@Z")
#pragma comment(linker, "/export:?Subtract@MyMathFuncs@MathFuncs@@SANNN@Z=RealMath.?Subtract@MyMathFuncs@MathFuncs@@SANNN@Z")


__declspec ( naked ) void myAdd(void)
{
    __asm{
        retn
    }
}

当我构建DLL时,dumpbin告诉我它导出了“?Add”而不是“?Add @ MyMathFuncs @ MathFuncs @@ SANNN @ Z”。我怀疑这可能是因为@符号被解释为序数前缀(即使从我的理解,在@符号之前需要有一个空格,因为它被解释为序数)。我试过双引号整个符号名称,我也尝试在@之前加回斜杠(它会将其导出为?添加\而不是)。到目前为止没有任何帮助,我不知道该怎么做。

转储文件dll_redirector.dll

File Type: DLL

  Section contains the following exports for dll_redirector.dll

    00000000 characteristics
    56878868 time date stamp Sat Jan 02 00:20:56 2016
        0.00 version
           1 ordinal base
           4 number of functions
           4 number of names

    ordinal hint RVA      name

          1    0 00011113 ?Add = @ILT+270(?myAdd@@YAXXZ)
          2    1          ?Divide@MyMathFuncs@MathFuncs@@SANNN@Z (forwarded to RealMath.?Divide@MyMathFuncs@MathFuncs@@SANNN@Z)
          3    2          ?Multiply@MyMathFuncs@MathFuncs@@SANNN@Z (forwarded to RealMath.?Multiply@MyMathFuncs@MathFuncs@@SANNN@Z)
          4    3          ?Subtract@MyMathFuncs@MathFuncs@@SANNN@Z (forwarded to RealMath.?Subtract@MyMathFuncs@MathFuncs@@SANNN@Z)

  Summary

        1000 .data
        1000 .idata
        2000 .rdata
        1000 .reloc
        1000 .rsrc
        4000 .text
       10000 .textbss

任何帮助将不胜感激。

0 个答案:

没有答案