gdb 調試命令記錄

啟動調試

gdb ./待調試的程序
#不帶參數
(gdb) run
#帶參數
gdb --args ./your_program arg1 arg2 arg3 
(gdb) run arg1 arg2 arg3
#圖形化代碼界面
(gdb) layout src

基礎調試命令

命令縮寫作用
run [args]r運行程序(可帶命令行參數)
break <location>b在函數/行號處設置斷點(如 b crypto_aead_init_x
nextn執行下一行(不進入函數)
steps執行下一行(進入函數)
continuec繼續運行直到下一個斷點
print <expr>p打印變量/表達式(如 p key[0]
backtracebt查看調用棧
quitq退出 GDB

調試加密函數的實戰示例

(1) 設置斷點
# 在關鍵函數和行號設斷點
(gdb) b crypto_aead_init_x
(gdb) b main:15  # 假設第15行調用加密函數
(2) 運行并檢查參數
(gdb) run
# 程序會在斷點處暫停# 查看傳入的 key 和 nonce
(gdb) p *key@32  # 打印key的32字節
(gdb) p *nonce@24 # 打印nonce的24字節# 檢查OpenSSL上下文是否創建成功
(gdb) p ctx->evp_ctx
(3) 單步跟蹤
(gdb) s  # 進入EVP_EncryptInit_ex
(gdb) n  # 跳過庫函數內部
(4) 捕獲錯誤

如果函數返回錯誤:

(gdb) p ERR_get_error()  # 打印OpenSSL錯誤碼
(gdb) p (char*)ERR_reason_error_string(ERR_get_error())  # 錯誤描述

高級調試技巧

(1) 條件斷點
# 僅當key的第一個字節為0時觸發斷點
(gdb) b crypto_aead_init_x if key[0] == 0
(2) 觀察點(Watchpoint)
# 監控key是否被意外修改
(gdb) watch *(uint8_t(*)[32])key
(3) 內存檢查
# 檢查EVP_CIPHER_CTX內存
(gdb) x/32xb ctx->evp_ctx
(4) 調用棧分析
# 崩潰時查看調用棧
(gdb) bt full

加密場景專用命令

(1) 檢查密鑰隨機性
# 在生成key/nonce后暫停
(gdb) p /x *key@32  # 16進制格式輸出
(2) 跟蹤加密過程
# 在加密前檢查明文
(gdb) p *plain_text@text_size# 加密后檢查密文
(gdb) p *cipher_text@text_size
(3) 驗證MAC計算
# 比較生成的MAC
(gdb) p /x *mac@16

GDB 圖形化界面(可選)

啟用 TUI 模式:

gdb -tui ./aead_demo
# 或運行時按 Ctrl+X+A

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

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

相關文章

STM32F103低功耗模式深度解析:從理論到應用實踐(上) | 零基礎入門STM32第九十二步

主題內容教學目的/擴展視頻低功耗模式什么是低功耗&#xff0c;模式介紹&#xff0c;切換方法。為電池設備開發做準備。 師從洋桃電子&#xff0c;杜洋老師 &#x1f4d1;文章目錄 一、低功耗模式概述1.1 為什么需要低功耗模式&#xff1f;1.2 基本實現原理 二、低功耗模式的本…

JavaScript instanceof 運算符全解析

JavaScript instanceof 運算符全解析 核心語義: 判斷一個對象(object)是否屬于某個構造函數(constructor)或類的實例,基于原型鏈(prototype chain)實現類型檢測。 一、JavaScript 中的基礎用法 1. 語法結構 object instanceof constructor 返回值:布爾值(true/fal…

電腦基礎之word基礎操作

word是常用的辦公軟件之一&#xff0c;用于文檔編輯&#xff0c;如合同/報告撰寫、論文等?。 一、簡介 word文檔最早由微軟推出&#xff0c;通過Microsoft Office Word軟件創建和編輯。由于涉及版權付費問題&#xff0c;大多數個人使用盜版軟件。后來金山出了WPS office免費軟…

深度解析Python代碼中的廣告信息提取與JSON處理

哈嘍,大家好,我是木頭左! 在當今數字化時代,廣告無處不在,而從廣告中提取關鍵信息并進行處理則成為了一項重要的技能。本文將深入剖析一段Python代碼,該代碼旨在從給定的JSON格式字符串中提取廣告相關信息,并對其進行解析和處理。通過這段代碼,將展示如何運用Python的j…

base64在線解碼工具

我們經常會用到base64編碼&#xff0c;相應的base64解碼成為日常必備&#xff0c;所有我們需要擁有一個base64在線解碼工具 base64在線解碼工具

Linux——進程信號(3)(信號保存與信號捕捉)

進程信號3 信號保存信號相關概念詳解信號集&#xff08;sigset_t&#xff09;及操作函數詳解 信號捕捉信號捕捉的詳細流程解析信號捕捉的核心概念信號捕捉的完整流程&#xff08;以 SIGQUIT 為例&#xff09; 信號保存 信號相關概念詳解 1.核心概念 (1) 信號遞達&#xff08…

批量在 txt 記事本文件的指定位置插入行,如在最末尾位置插入行

我們在網上下載的小說經常可以看到內容中每隔多少行都會現一些網站名稱和聯系方式等廣告信息&#xff0c;這些都是固定或者隨機插入在小說正文中的。那是怎么樣實現在文本文件中指定位置插入這些行的呢&#xff1f;今天就給大家介紹一下如何在 txt 記事本文件或者其它類型的文本…

python的內存管理機制

目錄 內存分配方式自動內存管理內存分配策略 垃圾回收機制引用計數垃圾回收對象創建和引用關系引用計數的狀態刪除變量 標記 - 清除垃圾回收 內存分配的區域劃分棧內存堆內存 內存管理的優化內存池技術對象共享 Python 的內存管理機制是其運行效率和安全性的重要保障&#xff0…

火山引擎coze用戶市場

火山引擎 **Coze**&#xff08;扣子&#xff09;的用戶市場主要集中在 **需要快速構建和部署智能對話應用的企業及開發者群體**&#xff0c;覆蓋多個行業與場景。以下是具體分析&#xff1a; --- ### **一、核心用戶群體** 1. **企業用戶** - **互聯網/科技公司**&#…

Java 責任鏈模式 詳解

責任鏈模式詳解 一、責任鏈模式概述 責任鏈模式(Chain of Responsibility Pattern)是一種行為型設計模式&#xff0c;它允許你將請求沿著處理鏈傳遞&#xff0c;直到有一個處理者能夠處理它為止。這種模式解耦了請求的發送者和接收者&#xff0c;使多個對象都有機會處理請求。…

【C++初階】--- string類

1.STL簡介 STL(standard template libaray-標準模板庫)&#xff1a;是C標準庫的重要組成部分&#xff0c;不僅是一個可復用的組件庫&#xff0c;而且是一個包羅數據結構與算法的軟件框架。 2.string類 2.1什么是string類 std::string 類是 C 標準庫中用于處理和操作字符串…

Ubuntu 20.04 中 Git 的安裝、配置和基本操作指南

本文為經驗 所談 使用版本為ubuntu20.04 1 ubuntu的git初始化 1.安裝git sudo apt-get install git 可通過git --version 命令查看&#xff0c;正常輸出git版本號即安裝成功。 2.配置用戶名和郵箱名 git config --global user.name "Your Name" git config --globa…

conda 激活環境vscode的Bash窗口

多份conda環境注意事項&#xff0c;當時安裝了兩個conda環境&#xff0c;miniconda和conda&#xff0c;導致環境總是沖突矛盾。初始化時需要更加注意。 $ C:/Users/a_hal/miniconda3/Scripts/conda.exe init bash能夠顯示用哪里的conda環境命令執行。 然后直接conda activate…

Mac下小智AI本地環境部署

可以進行聊天、編寫程序、播放歌曲等等的小智語音聊天小助手&#xff0c;在Mac環境下修改源代碼&#xff0c;值得擁有。本篇內容主要講解Mac下環境的搭建&#xff0c;WebSocket的修改。注&#xff1a;環境python3.12.0、ESP-IDF5.4.0、開發板ESP32S3。 目錄 1.Git安裝2.Python…

Linux安裝Cmake (Centos 7.9)

cmake安裝 這個雖然已經更新到了4.0.0版本了&#xff0c;但是我們要用3.5版本的&#xff0c;因為這個比較穩定 官方地址&#xff1a;https://github.com/Kitware/CMake/releases/tag/v3.5.0&#xff0c;選擇那個cmake-3.5.0-Linux-x86_64.tar.gz下載&#xff0c; 首先解壓文…

基于 SpringBoot 的舊物置換網站

收藏關注不迷路&#xff01;&#xff01; &#x1f31f;文末獲取源碼數據庫&#x1f31f; 感興趣的可以先收藏起來&#xff0c;還有大家在畢設選題&#xff08;免費咨詢指導選題&#xff09;&#xff0c;項目以及論文編寫等相關問題都可以給我留言咨詢&#xff0c;希望幫助更多…

ELK 通過 logstash 收集單個/多個日志文件

一、收集單個日志文件 注意事項&#xff1a; logstah 服務默認啟動用戶和組是 logstash被收集的日志文件有讀的權限并對寫入的文件有寫權限而 logstash 是普通用戶 1.1 編輯 logstash 配置文件 vim /etc/logstash/conf.d/test.conf input {file {path > "/var/log/…

分享一個Drools規則引擎微服務Docker部署

通常我們都是把Drools作為嵌入式使用&#xff0c;但在微服務泛濫時代&#xff0c;還在老套的嵌入式顯然不符合微服務架構要求&#xff0c;本文分享一個把Drools作為微服務獨立部署的方案。 本方案基于Drools引擎微服務&#xff0c;提供REST接口。 1、可以動態部署Drools規則2…

Mac 本地化部署 dify

Macbook 本地化部署 dify 目錄 Macbook 本地化部署 dify安裝dockerdocker下載地址 安裝dify下載dify到本地github可能遇到的問題: github打開超時在本地解壓dify.zip文件本地化部署docker部署可能遇到的問題: 部署超時登錄體驗 dify 安裝docker docker下載地址 根據電腦芯片選…

串口中斷接收與環形緩沖實例(apollo3 blue plus)

#define DEV_UART1 1 #define GPS_POWER_PIN 13 #define GPS_LOG_ENABLE 1 #define MAX_UART1_SIZE 1024 #define AM_BSP_GPIO_COM_UART1_TX 8 #define AM_BSP_GPIO_COM_UART1_RX 9 // 定義環形緩沖區結構 typed…