zoukankan      html  css  js  c++  java
  • 如何隐藏DLL中,导出函数的名称?

    一、引言

    很多时候,我们写了一个Dll,不希望别人通过DLL查看工具,看到我们的导出函数名称。可以通过以下步骤实现:

    1. 在def函数中做如下定义:

    LIBRARY
    EXPORTS
    HideFuncName @1 NONAME

    通过添加NONAME关键字,隐藏函数名,这样的话,用Dependency Walker来查看该Dll,只能看到如下结果:

    2. 如何调用该Dll中的函数,通过ID的方式调用,代码如下:

     1 typedef void (WINAPI *FPHideFuncName)();
     2     DWORD dwErrCode = 0;
     3     wstring str = CProcHelper::GetCurrentProcessPath();
     4     str += L"\Tool\resconfig.dll";
     5     HMODULE hModule = LoadLibrary(str.c_str());
     6     if (NULL != hModule)
     7     {
     8         FPHideFuncName fp = (FPHideFuncName)GetProcAddress(hModule, (char*)1);  // 通过ID获取函数地址
     9         //FPHideFuncName fp = (FPHideFuncName)GetProcAddress(hModule, "HideFuncName");
    10         if (NULL != fp)
    11         {
    12             fp();
    13         }
    14         dwErrCode = GetLastError();
    15     }

    二、小结:

    1. 只适合于内部使用的DLL;

    2. 通过函数名导出,还能减小DLL的大小;

  • 相关阅读:
    HDU 1016 Prime Ring Problem
    POJ 1724 ROADS(bfs最短路)
    HDU 1033 Edge
    IE 兼容模式
    HDU 1263 水果
    数据结构之图详解
    继续过中等难度.0309
    排序的稳定性
    Java+7入门经典
    哈希链表及其变种
  • 原文地址:https://www.cnblogs.com/nchxmoon/p/4458568.html
Copyright © 2011-2022 走看看