亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

crashpad的編譯過程及原理

2023-12-06 09:59:35
795
0

Crashpad編譯

Crashpad 是由 Google 開發的一個開源的跨平臺崩潰報告庫,主要用于在應用程序崩潰時收集和提交崩潰信息。通常,我們需要cmake來編譯項目,但由于crashpad不使用cmake編譯,因此要實現源碼編譯crashpad,需要編寫cmakelists.txt來編譯。

 

git clone github.com/TheAssemblyArmada/crashpad-cmake.git

 

在cmakelists.txt中添加:

 

add_subdirectory(crashpad-cmake)

 

crashpad原理(翻譯自官方文檔)

Crashpad捕獲導致崩潰的異常的詳細做法在不同操作系統之間有所不同。

 

macOS

在macOS上,操作系統將通過設置為客戶端進程異常端口的Mach端口通知客戶端崩潰的處理程序。由于在macOS上,內核將異常分派到Mach端口,因此在異常發生時,可以完全通過Crashpad處理程序處理異常,而無需在異常發生時在崩潰進程中運行任何代碼。

 

iOS

在iOS上,操作系統將通過Mach異常端口或信號處理程序通知崩潰的處理程序。由于異常在進程內處理,因此生成的是中間轉儲文件而不是迷你轉儲。有關iOS進程內處理程序的更多信息,請參閱更多信息。

 

Windows

在Windows上,操作系統在崩潰線程的上下文中分派異常。為了通知處理程序異常,Crashpad客戶端在客戶端進程中注冊一個UnhandledExceptionFilter(UEF)。當異常傳播到UEF時,它將異常信息和崩潰線程的ID存儲在注冊到處理程序的ExceptionInformation結構中。然后,它設置一個事件句柄以通知處理程序繼續處理異常。

 

注意事項

如果在異常發生時崩潰線程的堆棧被破壞,無法分派異常。在這種情況下,操作系統將立即終止進程,處理程序將無法生成崩潰報告。

如果在崩潰線程中處理異常,它將永遠不會傳播到UEF,因此不會生成崩潰報告。在Windows中,這在系統庫通常會在結構化異常處理程序下分派回調時發生。在某些系統配置中,在Windows消息分派期間以及例如DLL入口點通知期間經常發生這種情況。

在系統和運行時中存在越來越多的條件,檢測到的破壞或非法調用導致進程被立即終止,這種情況下將不會生成崩潰報告。

進程外異常處理

在Windows錯誤報告(WER)中存在一種機制,允許客戶端進程注冊以處理崩潰進程外的客戶端異常。不幸的是,這種機制難以使用,并且對上述許多注意事項并不提供覆蓋。詳細信息請參閱此處。

 

Linux/Android

在Linux上,異常被分派為信號發送到崩潰線程。Crashpad信號處理程序將通過套接字向Crashpad處理程序發送消息,通知其崩潰的位置以及從崩潰進程中讀取的異常信息。在使用共享套接字連接時,通信完全是單向的。客戶端將其轉儲請求發送到處理程序,然后等待處理程序以SIGCONT響應或超時發生。在使用私有套接字連接時,處理程序可以通過套接字響應以與ptrace代理進程通信。代理進程從崩潰進程派生,對崩潰進程執行ptrace請求,并通過套接字將信息發送到處理程序。

0條評論
作者已關閉評論
p****n
4文章數
0粉絲數
p****n
4 文章 | 0 粉絲
原創

crashpad的編譯過程及原理

2023-12-06 09:59:35
795
0

Crashpad編譯

Crashpad 是由 Google 開發的一個開源的跨平臺崩潰報告庫,主要用于在應用程序崩潰時收集和提交崩潰信息。通常,我們需要cmake來編譯項目,但由于crashpad不使用cmake編譯,因此要實現源碼編譯crashpad,需要編寫cmakelists.txt來編譯。

 

git clone github.com/TheAssemblyArmada/crashpad-cmake.git

 

在cmakelists.txt中添加:

 

add_subdirectory(crashpad-cmake)

 

crashpad原理(翻譯自官方文檔)

Crashpad捕獲導致崩潰的異常的詳細做法在不同操作系統之間有所不同。

 

macOS

在macOS上,操作系統將通過設置為客戶端進程異常端口的Mach端口通知客戶端崩潰的處理程序。由于在macOS上,內核將異常分派到Mach端口,因此在異常發生時,可以完全通過Crashpad處理程序處理異常,而無需在異常發生時在崩潰進程中運行任何代碼。

 

iOS

在iOS上,操作系統將通過Mach異常端口或信號處理程序通知崩潰的處理程序。由于異常在進程內處理,因此生成的是中間轉儲文件而不是迷你轉儲。有關iOS進程內處理程序的更多信息,請參閱更多信息。

 

Windows

在Windows上,操作系統在崩潰線程的上下文中分派異常。為了通知處理程序異常,Crashpad客戶端在客戶端進程中注冊一個UnhandledExceptionFilter(UEF)。當異常傳播到UEF時,它將異常信息和崩潰線程的ID存儲在注冊到處理程序的ExceptionInformation結構中。然后,它設置一個事件句柄以通知處理程序繼續處理異常。

 

注意事項

如果在異常發生時崩潰線程的堆棧被破壞,無法分派異常。在這種情況下,操作系統將立即終止進程,處理程序將無法生成崩潰報告。

如果在崩潰線程中處理異常,它將永遠不會傳播到UEF,因此不會生成崩潰報告。在Windows中,這在系統庫通常會在結構化異常處理程序下分派回調時發生。在某些系統配置中,在Windows消息分派期間以及例如DLL入口點通知期間經常發生這種情況。

在系統和運行時中存在越來越多的條件,檢測到的破壞或非法調用導致進程被立即終止,這種情況下將不會生成崩潰報告。

進程外異常處理

在Windows錯誤報告(WER)中存在一種機制,允許客戶端進程注冊以處理崩潰進程外的客戶端異常。不幸的是,這種機制難以使用,并且對上述許多注意事項并不提供覆蓋。詳細信息請參閱此處。

 

Linux/Android

在Linux上,異常被分派為信號發送到崩潰線程。Crashpad信號處理程序將通過套接字向Crashpad處理程序發送消息,通知其崩潰的位置以及從崩潰進程中讀取的異常信息。在使用共享套接字連接時,通信完全是單向的。客戶端將其轉儲請求發送到處理程序,然后等待處理程序以SIGCONT響應或超時發生。在使用私有套接字連接時,處理程序可以通過套接字響應以與ptrace代理進程通信。代理進程從崩潰進程派生,對崩潰進程執行ptrace請求,并通過套接字將信息發送到處理程序。

文章來自個人專欄
文章 | 訂閱
0條評論
作者已關閉評論
作者已關閉評論
0
0