簡體   English   中英

多個應用程序入口點

[英]Multiple application entry points

最近,我試圖通過為已經具有主入口點(它是控制台exe)的應用程序創建一個額外的(DLLMain)入口點,將單元測試添加到現有的二進制文件中。 盡管我無法從python單元測試框架中將其用作DLL,但該應用程序似乎已正確編譯,所有將exe用作dll的嘗試均失敗。

是否有人在添加額外的應用程序入口點以及任何輸入方式方面有任何想法或經驗,為什么這樣做行不通?

為了實現所需的功能,您需要解決一些問題:

  • exe必須具有重定位表(使用鏈接器開關/ FIXED:NO)
  • 該exe必須導出至少一個功能-很清楚如何執行此操作。

我建議使用不帶某些開關(/ header,/ exports且不帶開關)的DUMPBIN.EXE檢查exe頭文件。 您可以將應用程序的結構與Winword.exe或Outlook.exe進行比較,后者會導出一些功能。

如果所有這些都無濟於事,我將嘗試編寫一個可作為exe加載的測試EXE應用程序,並將代碼發布在此處。

更新 :剛才驗證了我的建議。 有用。 文件Loadable.c如下所示

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

EXTERN_C int __declspec(dllexport) WINAPI Sum (int x, int y);

EXTERN_C int __declspec(dllexport) WINAPI Sum (int x, int y)
{
    return x + y;
}

int main() 
{
    printf ("2+3=%d\n", Sum(2,3));
}

唯一重要的鏈接器開關是/FIXED:NO ,它可以在鏈接器設置的高級部分找到。 該程序可以運行並產生輸出“ 2+3=5 ”。

另一個EXE將EXE加載為DLL並調用Sum函數:

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

typedef int (WINAPI *PFN_SUM) (int x, int y);

int main()
{
    HMODULE hModule = LoadLibrary (TEXT("C:\\Oleg\\ExeAsDll\\Loadable.exe"));
    PFN_SUM fnSum = (PFN_SUM) GetProcAddress (hModule, "_Sum@8");
    int res = fnSum (5,4);
    printf ("5+4=%d\n", res);
    return 0;
}

該程序還可以運行並產生輸出“ 5+4=9 ”。

我不確定,但我猜想Windows只是拒絕將EXE進程內和DLL作為新進程簡單而簡單地加載。

這些問題似乎包含更多細節:

在一個可執行映像中獲得兩種行為的最簡單方法是將其設計為DLL,然后使用rundll32.exe獨立執行它。 無需編寫自己的包裝器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM