簡體   English   中英

當前功能地址-x64

[英]Current function address - x64

我正在這個小項目上工作,我想生成應用程序的調用圖-我不打算做任何復雜的事情,主要是為了娛樂/體驗。 我正在x64平台上工作。

我設定的首要目標是能夠衡量測試應用程序每個功能所花費的時間。 到目前為止,我的策略是使用__penter()_和__pexit()_-__penter()_是將在每個方法或函數的開始處調用的函數,相反,__ pexit()_將在以下方法或函數的末尾調用每個方法或函數。

使用這兩個函數,我可以記錄每個函數調用以及在每個函數中花費的時間。 接下來,我想獲取被調用的每個函數的地址。
例如,如果我們考慮以下調用堆棧(非常簡化):


main()  
....myFunction()  
........_penter()

我在__penter_中,我想獲取調用函數myFunction()的地址。 對於非葉函數,我已經找到了一種方法,我只是使用RtlLookupFunctionEntry 但是,此解決方案似乎不適用於葉函數,因為它們不提供任何展開數據。

我正在考慮的一件事是在調用堆棧的main()中再上一層,並手動解碼CALL過程-這將涉及獲取指向調用myFunction()的指令的指針。

我想知道在葉子函數的情況下,是否有人會知道如何獲取當前函數的地址。 我有種直覺,覺得我目前的方法有點復雜。

謝謝,

克萊姆

我相信SymGetSymFromAddr64 ,可能與StackWalk64應該可以為您(大部分?)提供所需的東西。

嗯,x64代碼,除非您使用ml64.exe,否則不會隨意使用匯編程序。 這里有一個內在函數應該有所幫助,_ReturnAddress()為您提供對__penter()函數的調用的代碼位置。 順便說一句。 這應該足以幫助您識別呼叫者。

暫無
暫無

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

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