ProxyDLL實現對D3D程式的(FPS)監控

來源:互聯網
上載者:User

最近一測試組的同事說想寫一個自動化的遊戲測試載入器,有這麼一個需求:怎麼在一個程式中擷取另一個D3D程式的FPS等渲染相關的資訊?這個問題倒是比較常見,比如錄影軟體Fraps就有這個最基本的功能,而效能測試工具GPA則實現得更加徹底。乍一想還真沒什麼思路,通過驅動層實現吧又太複雜了,不是對方想要的。於是網上搜了一下發現一種叫做Proxy
Dll(代理Dll)的方法,覺得可行性比較強,而且做法簡單效率也不錯。

應用程式為了調DirectX的相應功能需要首先載入相應的D3D庫,比如最基本的d3d9.dll。而代理Dll顧名思義就是通過一個中間環節來實現應用程式與真實的dll之間的溝通橋樑,這樣一來兩者之間的資料傳遞等操作就變為透明可見,如此一來也可以在其中添加一些自己的操作(類似於收取此路是我開的過路費^0^ )。

常規dll調用:應用程式<->系統d3d9.dll

代理dll調用:應用程式<->代理d3d9.dll<->系統d3d9.dll

通過上述關係可以看到代理dll可以理解為一個空殼,實際的操作還需要其來載入系統的dll實現。

產生上述dll之後如何讓對應的應用程式來調用呢?最簡單的方法是直接把代理的dll拷貝到對應的應用程式工作目錄下。這種方法利用了程式載入dll時的尋找順序:先在最近的檔案夾中搜尋,最後才到系統中去找。但這個需要手動完成的過程看起來實在是不怎麼優美,不過也沒其它什麼辦法。如果有相應的應用程式載入程式,則可以通過運行前複製,運行後刪除來完成。

通過代理dll可以一定程式上完成幹涉程式對dll調用的目的,但如果程式強行從系統目錄來載入dll的話則這種方法就無能為力,此時就需要其它一些更加深入的方法,如實現代碼注入等。

註:左上方的FPS顯示即是通過代理d3d9.dll實現,也可以在其中控制渲染模式,如solid,wireframe

有了上述的基本實現之後沒準兒就可以利用這種方法實現更多的功能,而且還可以嘗試其它的dll(如ogl)

代碼下載: http://dl.dbank.com/c0ytunrbkf

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.