2013-08-18 61 views
0

我使用DLL注入視頻遊戲的目的是改裝(我正在建立一個遊戲的API)。手動定義外部符號與海灣合作委員會

我想從我的新DLL直接訪問EXE中的結構和變量。變量的絕對地址是已知的(EXE具有固定的圖像庫)。

根據GNU ld文檔,我可以使用--defsym=symbol=expression在輸出文件中創建一個全局符號,其中包含由expression給出的絕對地址。

我不能得到它的工作。

如果我在我的代碼中聲明符號爲extern,並使用ld --defsym,則會得到未定義的引用錯誤。但是如果我在代碼中定義符號,它只是使用本地(DLL)版本,而不是EXE。

看來--defsym選項沒有效果。任何見解將不勝感激。

更新:--defsym在Linux下完美工作。當我嘗試在Windows上使用mingw進行編譯時,出現undefined reference錯誤。

回答

1

我已經知道了這個問題。

在檢查由mingw生成的程序集之後,我發現C符號名稱前面加了一個下劃線。這發生在Windows上,但不是在Linux上。

有一個gcc選項-fno-leading-underscore,但這會導致對WinMain的未定義參考。

只需在符號名稱中添加前導下劃線即可。

示例:如果我的符號在C中被命名爲alien,則使用gcc --defsym=_alien=0x500000可以正常工作。

相關問題