關於微軟Detours包編譯和靜態鏈結

2021-08-30 19:07:46 字數 1803 閱讀 9614

只說兩點卡過我的地方:

1、如何編譯。

網上一般的解釋是只要安裝過vc或者vs的計算機,在detours的src目錄下使用nmake就可以成功編譯。我想,這樣實驗的人可能會有不少會得到這麼一句話:nmake不是內部命令,也不是外部命令。。。這是因為vs(僅限2008,其它版本不清楚)安裝後,並沒有將nmake所在的bin目錄新增到環境變數中。這個好解決,在執行的時候使用全路徑或者乾脆就把nmake拷貝到detours的src目錄中行不行?實驗了下,果然可以,nmake是跑起了,但是碰到rc detoured.rc的時候,又會報個錯誤出來:rc 不是內部命令也不是外部命令。明顯,rc.exe又找不到了。。。。

rc.exe在**嘞?預設情況下應該是在c:/program files/microsoft sdks/windows/v6.0a/bin下。。若繼續將該路徑加為環境變數,就好了。。所幸的是微軟提供了乙個新增環境變數的批處理,可以直接使用和nmake.exe在同一資料夾下的vcvars32.bat。由此得到,完整編譯的方法如下:

1、cmd下定位到detours下src資料夾裡面。

2、執行vcvars32.bat批處理,可以使用全路徑,但是執行過後切記不要關閉cmd(批處理新增環境變數為臨時環境變數,關掉cmd窗體即失效)。

3、nmake。。。

這樣應該就可以完成編譯了。。。至少我完成了。。。

2、如何靜態引用

如果按常規的辦法來引入庫的話,在生成的檔案中,都會引入乙個叫detoured的庫。如何才能去除這個庫呢?微軟給出的資料中看了半天也沒有看懂。。。

網上有人說是,不要引入detoured的lib檔案。可是不引用的話,就會報乙個大大的鏈結錯誤——找不到乙個叫detoured的函式。

網上有人說要修改一下detours.cpp檔案,但是又沒有幾個人給出修改的方法(或許我查詢的辦法不對,有人說網上資料很多,可我就是沒找到)。看一看detoured都做了些什麼:

detoured原始碼:

static hmodule s_hdll; hmodule winapi detoured() bool winapi dllmain(hinstance hinst, dword dwreason, lpvoid reserved) return true; }

可以看出這個函式只是返回了乙個hmodule。disablethreadlibrarycalls也是沒什麼用處。

微軟官方幫助中給出的解釋是:這是乙個標誌,如果你使用了detours庫。。。。。(無語)

看了看detours的源**,又測試了下,發現修改這幾個地方,就可以達到目的:

一下都是在src/detours.cpp檔案中:

1、注釋掉:#include "detoured.h"

2、注釋掉:

#ifdef detours_internal_usage         #error feature not supported in this release.         #else            detoured();         #endif

3、注釋掉:

#ifdef detours_internal_usage         #error feature not supported in this release.         #else          return detoured();         #endif

(上面這一段在detourgetdetouredmarker函式中。)

另外還要再返回乙個hmodule,就返回當前的:

return getmodulehandle(null);

編譯,把生成的detours.lib加到我的工程中,編譯,搞定。。。。。。

預編譯 關於 和

1 在c語言巨集中,的功能是將器後面的巨集引數進行字串化操作,對它所引用的巨集變數通過替換後在其左右各加上乙個雙引號 define warn if exp do while 0 那麼實際使用中會出現下面所示的替換過程 warn if divider 0 被替換為 do while 0 這樣每次div...

關於知識分享和微軟TechEd Roadshow

今天想在這裡發上幾句牢騷。首先是關於部門內部的知識分享計畫,這是在部門內部開展的一項分享知識和經驗的活動,到現在為止,已經陸續開展了三個月,然而,就在這個月,卻出現了問題,在前三次都結束之後,第四次無人接手來做知識的分享了。大家的理由都很充分,工作忙,時間不夠,準備不充分,等等。其實,反思一下,還是...

關於UniGUI安裝包的編譯環境設定和執行部署

二 編譯 2.1 編譯庫路徑 2.2 這個庫路徑千萬別加 fmsoft unigui source core pngimage 其下的pngimage.pas等幾個單元有bug,反正也不用。否則死活通不過。2.3 重新編譯分發bpl 預設分發訪問位置 c users public documents...