2025 - GDB 盲調筆記--調試 “無調試符號“ “無調試信息“ 的三方程序

環境: arm64-ubuntu

相關:strace、ltrace、readelf、patchelf、strings、ldd? -v

1). 使用 gdb 啟動目標程序(不能直接用gdb啟動的,可以先單獨啟動,再?gdb attach 強制調試)

DIR_APP=/opt/test
gdb --args env LANGUAGE= LD_LIBRARY_PATH=${DIR_APP}:${DIR_APP}/addons/cef:${DIR_APP}/old-libs  ${DIR_APP}/main

2). gdb 指令

gdb載入目標程序后會自動暫停程序的運行,要繼續運行程序得敲:
r? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # run
q? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# quit, 退出 gdb,停止調試

但在運行之前,可能需要先靜態分析下,好設置斷點,設置斷點的gdb指令:
b? ? ?*0x7ff43b8254 ? ? ? ? ? # 在指定地址下斷, breakpoint
b? ? ? uv_fs_mkdir? ? ? ? ? ? ??# 如果有函數名這種明確的調試符號,可以直接在函數入口處下斷,即設置斷點
b? ? ? __libc_start_main

斷點被觸發后,gdb會暫停程序,此時如要繼續運行,得敲入:
c? ? ? ? #?或者其它的繼續運行指令, 如單步運行 si、ni,運行到函數結束 finish



反匯編指定地址的代碼:
x? ? ? ? ? ?/20i 0x0000007ff43b3a90? ? ? #?examine,用于解析指定內存地址的數據,可通過選項來決定是解析為匯編指令還是指定格式的數據
display /20i $pc
disp? ? ? /20i $pc

暫停時自動反匯編的開關打開:
set disassemble-next-line auto


顯示當前的函數調用棧:
bt
bt full


顯示指定地址的內存:
dump binary memory ./test.so 0x0000007ff4360000 0x0000007ff43e3288
x? ? /20x? ? 0x0000007ff4360000
p (char*)0x7fffffcdb9


顯示寄存器值
i? ? ? ? registers
p? ? ? $pc
print $pc


顯示各個庫都被加載到內存哪個地方(可用于在靜態分析工具,如ida中設置段基址:? edit -> segment -> rebase):
info proc mappings? ? ? ? #?這個才是準確的, info sharelibrary(i? sh) 顯示的是可執行區的內存起始地址



單步跟蹤:
si ?會進函數(有調試符號可以不用加i)
ni ?不進函數
?

執行到當前函數結束處
finish
?

3). gdb 多線程相關的調試

info threads????????# 顯示所有線程

thread n??????????????# 切換到指定線程

set scheduler-locking on ? ?# 只運行當前線程

4). 斷點以外的其它打斷方式?

catch exception

catch assert

catch catch

catch signal 6? ?# linux信號攔截也可以打斷目標程序的運行

catch signal 11 # SIGSEGV,這個攔截打斷類型,對軟件在新平臺運行報錯的排查有用
? ? ? ? ? ? ? ? ? ? ? ? ?# 能準確定位到哪個庫中的哪個函數中的哪條CPU指令!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897416.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OCPP擴展機制與自定義功能開發:協議靈活性設計與實踐 - 慧知開源充電樁平臺

OCPP擴展機制與自定義功能開發:協議靈活性設計與實踐 引言 OCPP作為開放協議,其核心價值在于平衡標準化與可擴展性。面對不同充電樁廠商的硬件差異、區域能源政策及定制化業務需求,OCPP通過**擴展點(Extension Points&#xff09…

【項目】nnUnetv2復現

作者提出一種nnUNet(no-new-Net)框架,基于原始的UNet(很小的修改),不去采用哪些新的結構,如相殘差連接、dense連接、注意力機制等花里胡哨的東西。相反的,把重心放在:預處理(resampling和normalization)、訓練(loss,optimizer設置、數據增廣)、推理(patch-based…

代碼隨想錄算法訓練營第八天|Leetcode 151.翻轉字符串里的單詞 卡碼網:55.右旋轉字符串 字符串總結 雙指針回顧

151.翻轉字符串里的單詞 建議:這道題目基本把 剛剛做過的字符串操作 都覆蓋了,不過就算知道解題思路,本題代碼并不容易寫,要多練一練。 題目鏈接/文章講解/視頻講解:代碼隨想錄 我們這道題的思路是,先將整…

【計算機網絡】計算機網絡的性能指標——時延、時延帶寬積、往返時延、信道利用率

計算機網絡的性能指標 導讀 大家好,很高興又和大家見面啦!!! 在上一篇內容中我們介紹了計算機網絡的三個性能指標——速率、帶寬和吞吐量。用大白話來說就是:網速、最高網速和實時網速。 相信大家看到這三個詞應該就…

Refreshtoken 前端 安全 前端安全方面

網絡安全 前端不需要過硬的網絡安全方面的知識,但是能夠了解大多數的網絡安全,并且可以進行簡單的防御前兩三個是需要的 介紹一下常見的安全問題,解決方式,和小的Demo,希望大家喜歡 網絡安全匯總 XSSCSRF點擊劫持SQL注入OS注入請求劫持DDOS 在我看來,前端可以了解并且防御前…

vue3框架的響應式依賴追蹤機制

當存在一個響應式變量于視圖中發生改變時會更新當前組件的所以視圖顯示,但是沒有視圖中不寫這個響應式變量就就算修改該變量也不會修改視圖,這是為什么?我們能否可以理解寬泛的理解為vue組件的更新就是視圖的更新,單當視圖中不存在…

C#核心(22)string

前言 我們在之前的學習中已經學習過了很多數字類型的數據結構,但一直沒有講解除了char以外的字符串相關的知識點,這也是我們繼繼承,封裝,重載這些知識點之后要補充講解的核心知識點。 你也發現了,其實在密封函數之后我們就已經開始進入更底層的方面為你講解知識點了,這…

Spring Boot 本地緩存工具類設計與實現

在 Spring Boot 應用中,緩存是提升性能的重要手段之一。為了更方便地使用緩存,我們可以設計一套通用的本地緩存工具類,封裝常見的緩存操作,簡化開發流程。本文將詳細介紹如何設計并實現一套 Spring Boot 本地緩存工具類&#xff0…

引領變革!北京愛悅詩科技有限公司榮獲“GAS消費電子科創獎-產品創新獎”!

在2025年“GAS消費電子科創獎”評選中,北京愛悅詩科技有限公司提交的“aigo愛國者GS06”,在技術創新性、設計創新性、工藝創新性、智能化創新性及原創性五大維度均獲得評委的高度認可,榮獲“產品創新獎”。 這一獎項不僅是對愛悅詩在消費電子…

考研英語語法全攻略:從基礎到長難句剖析?

引言 在考研英語的備考之旅中,語法猶如一座燈塔,為我們在浩瀚的英語知識海洋中指引方向。無論是閱讀理解中復雜長難句的解讀,還是寫作時準確流暢表達的需求,扎實的語法基礎都起著至關重要的作用。本文將結合有道考研語法基礎入門課的相關內容,為大家全面梳理考研英語語法…

構建自己的AI客服【根據用戶輸入生成EL表達式】

要實現一個基于對話形式的AI客服系統,該系統能夠提示用戶輸入必要的信息,并根據用戶的輸入生成相應的EL(Expression Language)表達式編排規則,您可以按照以下步驟進行設計和開發。本文將涵蓋系統架構設計、關鍵技術選型…

【JavaWeb12】數據交換與異步請求:JSON與Ajax的絕妙搭配是否塑造了Web的交互革命?

文章目錄 🌍一. 數據交換--JSON??1. JSON介紹??2. JSON 快速入門??3. JSON 對象和字符串對象轉換??4. JSON 在 java 中使用??5. 代碼演示 🌍二. 異步請求--Ajax??1. 基本介紹??2. JavaScript 原生 Ajax 請求??3. JQuery 的 Ajax 請求 &a…

解決CentOS 8.5被惡意掃描的問題

CentOS 8 官方倉庫已停止維護(EOL),導致一些常用依賴包如fail2ban 無法正常安裝。 完整解決方案: 一、問題根源 CentOS 8 官方倉庫已停更:2021 年底 CentOS 8 停止維護,默認倉庫的包可能無法滿足依賴關系。EPEL 倉庫兼容性:EPEL 倉庫可能未適配 CentOS 8.5 的舊版本依賴…

使用格式工廠提取視頻中的音頻

選擇輸出格式:在格式工廠的左側功能欄中,點擊 “音頻” 選項,會展開多種音頻格式,根據自己的需求選擇如 “MP3”“WAV”“WMA” 等作為輸出格式。添加視頻文件:點擊 “添加文件” 按鈕,在彈出的文件瀏覽器中…

前端雜的學習筆記

什么是nginx Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器 Nginx是一款輕量級的Web 服務器/反向代理服務器,處理高并發能力是十分強大的,并且支持熱部署,啟動簡單,可以做到7*24不間斷運行 正代和反代 學習nginx&a…

玩轉ChatGPT:GPT 深入研究功能

一、寫在前面 民間總結: 理科看Claude 3.7 Sonnet 文科看DeepSeek-R1 那么,ChatGPT呢? 看Deep Research(深入研究)功能。 對于科研狗來說,在這個文章爆炸的時代,如何利用AI準確、高效地收…

RabbitMQ 2025/3/5

高性能異步通信組件。 同步調用 以支付為例: 可見容易發生雪崩。 異步調用 以支付為例: 支付服務當甩手掌柜了,不管后面的幾個服務的結果。只管庫庫發,后面那幾個服務想取的時候就取,因為消息代理里可以一直裝&#x…

Win10 訪問 Ubuntu 18 硬盤

目錄 方案一:使用Samba共享服務Ubuntu 18 端配置Windows 10 端訪問 方案二:使用 SSHFS(需在 Windows 上安裝 SSH 客戶端)Ubuntu 18 端配置Windows 10 端配置 方案三:使用 FTP 服務Ubuntu 18 端配置Windows 10 端訪問 方…

Android15使用FFmpeg解碼并播放MP4視頻完整示例

效果: 1.編譯FFmpeg庫: 下載FFmpeg-kit的源碼并編譯生成安裝平臺庫 2.復制生成的FFmpeg庫so文件與包含目錄到自己的Android下 如果沒有prebuiltLibs目錄,創建一個,然后復制 包含目錄只復制arm64-v8a下

Hadoop、Hive、Spark的關系

Part1:Hadoop、Hive、Spark關系概覽 1、MapReduce on Hadoop 和spark都是數據計算框架,一般認為spark的速度比MR快2-3倍。 2、mapreduce是數據計算的過程,map將一個任務分成多個小任務,reduce的部分將結果匯總之后返回。 3、HIv…