You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试DLL文件遇缺失入口错误:求助定位CreateTextDocument问题

DLL运行错误:Missing Entry: CreateTextDocument 解决方法

问题描述

运行rundll32.exe pwned.dll,CreateTextDocument时,系统提示:

Error in pwned.dll - Missing Entry: CreateTextDocument

目标是通过DLL在用户桌面创建并写入文本文件,相关代码如下:

#include <windows.h>
#include <shlobj.h>
#include <stdio.h>
#include <tchar.h>

void __stdcall CreateTextDocument(HWND hwnd, HINSTANCE hinst, LPSTR lpCmdLine, int nCmdShow)
{
    // 获取用户桌面路径
    TCHAR szFolderPath[MAX_PATH];
    if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_DESKTOPDIRECTORY, NULL, 0, szFolderPath)))
    {
        // 拼接文件完整路径
        TCHAR szFilePath[MAX_PATH];
        _stprintf_s(szFilePath, MAX_PATH, _T("%s\\MyTextFile.txt"), szFolderPath);

        // 创建文件
        HANDLE hFile = CreateFile(szFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile != INVALID_HANDLE_VALUE)
        {
            // 写入示例文本
            char szText[] = "This is some sample text that will be written to the file.";
            DWORD dwBytesWritten;
            WriteFile(hFile, szText, sizeof(szText), &dwBytesWritten, NULL);

            // 关闭文件句柄
            CloseHandle(hFile);
        }
        else
        {
            MessageBox(hwnd, _T("创建文件失败。"), _T("错误"), MB_OK | MB_ICONERROR);
        }
    }
    else
    {
        MessageBox(hwnd, _T("获取桌面路径失败。"), _T("错误"), MB_OK | MB_ICONERROR);
    }
}

已尝试两种命令运行:

  • rundll32.exe mydllfile.dll,CreateTextDocument
  • rundll32.exe mydllfile.dll

错误原因

Rundll32只能调用DLL导出表中存在的函数,当前代码中的CreateTextDocument函数未被导出,因此系统找不到该入口点。

解决方法

方法1:用__declspec(dllexport)修饰函数

直接在函数声明前添加__declspec(dllexport),让编译器自动将函数加入导出表:

#include <windows.h>
#include <shlobj.h>
#include <stdio.h>
#include <tchar.h>

// 添加__declspec(dllexport)标记导出函数
__declspec(dllexport) void __stdcall CreateTextDocument(HWND hwnd, HINSTANCE hinst, LPSTR lpCmdLine, int nCmdShow)
{
    // 原函数内容不变
    TCHAR szFolderPath[MAX_PATH];
    if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_DESKTOPDIRECTORY, NULL, 0, szFolderPath)))
    {
        TCHAR szFilePath[MAX_PATH];
        _stprintf_s(szFilePath, MAX_PATH, _T("%s\\MyTextFile.txt"), szFolderPath);

        HANDLE hFile = CreateFile(szFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile != INVALID_HANDLE_VALUE)
        {
            char szText[] = "This is some sample text that will be written to the file.";
            DWORD dwBytesWritten;
            WriteFile(hFile, szText, sizeof(szText), &dwBytesWritten, NULL);
            CloseHandle(hFile);
        }
        else
        {
            MessageBox(hwnd, _T("创建文件失败。"), _T("错误"), MB_OK | MB_ICONERROR);
        }
    }
    else
    {
        MessageBox(hwnd, _T("获取桌面路径失败。"), _T("错误"), MB_OK | MB_ICONERROR);
    }
}

方法2:使用模块定义(.def)文件

创建一个后缀为.def的文件,内容如下:

LIBRARY pwned
EXPORTS
CreateTextDocument @1

编译DLL时,将这个.def文件加入编译参数,链接器会根据文件内容导出指定函数。

编译与运行注意事项

  1. 确保使用支持__stdcall调用约定的编译器(如MSVC)编译DLL。
  2. 运行时必须使用正确的命令格式:rundll32.exe pwned.dll,CreateTextDocument(注意逗号前后没有空格)。

内容的提问来源于stack exchange,提问作者Sebastian Birke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:22:20