gdb

嵌入式程序应用调试

血红的双手。 提交于 2020-11-02 13:07:41
目录 一、GDB简单调试 1、 安装gdb 2、内存出错的GDB调试 二、安装opencv-3.4.12 1、将在网上下载好的opencv-3.4.12拖进unbuntu并将其复制到主目录下 2、打开终端解压包 3、 进入到解压后的文件包中 4、 安装依赖库和cmake 5、创建编译文件夹 6、进行cmake 7、配置OpenCV的编译环境 8、执行如下命令使得刚才的配置路径生效 9、执行如下命令使得配置生效并更新 二、 Linux编程 1、在opencv-3.4.1下新建文件夹mytest 2、创建test.cpp 3、进入编程 4、保存并编译 5、运行结果 三、使用opencv库编写打开摄像头压缩视频的程序 1、先将虚拟机的usb控制器下的usn兼容改为3.0并连接摄像头 2.创建文件和编译 3.编译后运行结果 总结 一、GDB简单调试 1、 安装gdb sudo apt - get install gdb 2、内存出错的GDB调试 • Linux中,程序崩溃时,一般会产生core文件,记录进程退出前的状态,调试段错误问题,借助于该文件,可快速定位问题。 • 可按如下步骤生成和使用core文件 – Step 1: 让系统产生core文件 • ulimit –c num #设定core文件容量(num为数字,为0 是不产生core文件) – Step 2: 运行程序,让程序崩溃

攻防世界--simple-check-100

≯℡__Kan透↙ 提交于 2020-11-02 06:23:59
测试文件: https://adworld.xctf.org.cn/media/task/attachments/2543a3658d254c30a89e4ea7b8950c27.zip 这道题很坑了,exe文件研究了半天。 1.准备 获得信息 32位文件 2.IDA打开 用IDA看了三个文件,都差不多。 1 int __cdecl main( int argc, const char **argv, const char ** envp) 2 { 3 void *v3; // esp 4 void *v4; // esp 5 char *v6; // [esp+4h] [ebp-44h] 6 char v7; // [esp+8h] [ebp-40h] 7 char v8; // [esp+1Bh] [ebp-2Dh] 8 char *v9; // [esp+1Ch] [ebp-2Ch] 9 int v10; // [esp+20h] [ebp-28h] 10 char v11; // [esp+25h] [ebp-23h] 11 char v12; // [esp+26h] [ebp-22h] 12 char v13; // [esp+27h] [ebp-21h] 13 char v14; // [esp+28h] [ebp-20h] 14 char v15; // [esp

嵌入式系统程序调试

橙三吉。 提交于 2020-10-29 13:36:36
嵌入式系统程序调试 一、GDB调试 1)GDB简介 2)GDB调试(示例) (1)启动GDB (2)查看源码 (3)设置断点 (4)运行程序 (5)查看变量 3)GDB的段错误调试 (1)创建并编辑文件 (2)调试程序 (3)GDB调试 (4)生成core文件 (5)gdb配合core文件,定位问题 二、opencv图像编程 1)安装opencv 2)Linux下编程 思考题 三、摄像头显示处理视频 1)编写程序代码 2)参数设置 3)处理视频 思考题 总结 一、GDB调试 1)GDB简介 GDB : GNU Debugger,是GNU工程为GNU操作系统开发的 调试器,但它的使用不局限于GNU操作系统, GDB可以运行 在UNIX、Linux甚至Microsoft Windows。GDB可以调试C、C++、Objective-C、Pascal、Ada等语言编写的程序;被调试的程序可以跟GDB运行于同一台电脑,也可运行于不同电脑。 2)GDB调试(示例) (1)启动GDB 1>首先先创建一个.c文件(haha.c)编辑该文件, gedit haha . c 输入代码,如下 # include <stdio.h> void ShowRevertNum ( int iNum ) { while ( iNum > 10 ) { printf ( "%d" , iNum % 10 ) ;

攻防世界 高手区 simple-check-100 —— gdb动态调试绕过判断函数

元气小坏坏 提交于 2020-10-29 13:28:02
攻防世界 高手区 simple-check-100 —— gdb动态调试绕过判断函数 IDA静态调试 gdb动态调试 IDA静态调试 可以轻松判断interesting _function函数是藏有flag的函数,点开查看伪代码 可以看到这个函数有输出部分,如果能逆出来那就是flag,但是在查看后我放弃了,这内存指过来指过去很烦,于是我去看了check函数: 这能判断为真?????? 直接gdb动态调试,绕过这个函数 gdb动态调试 Linux打开命令行,输入命令 gdb task9_x86_64_46d01fe312d35ecf69c4ff8ab8ace75d080891dcr r 设下断点 b check_key 一直输入 n 命令直到比较v3和-559038737 可以判断是这个地方,尝试修改ptr [rbp - 0x10]值为-559038737,但是一直提示不能修改void为这个值,所以我继续 n 直到test命令 因为上一步比较失败后会给eax赋值为0,那么我们只要把eax的值改为1就好了 在此处使用命令 set $eax=1 然后继续 c 到程序结束 可以看到输出flag: flag_is_you_know_cracking!!! 喜欢的小伙伴可以一键三连哦!感谢!! 来源: oschina 链接: https://my.oschina.net/u/4386695

tcp连接时,BROKEN PIPE错误的原因以及解决方法

跟風遠走 提交于 2020-10-29 01:41:05
tcp连接时,BROKEN PIPE错误的原因以及解决方法 问题: 写了一个server和一个client,UNIX套接字的,server不断接收消息并打印出来,client是一个交互程序,输入一个消息回车发送,接着又可以输入消息。 出问题了: 当server监听着,client第一次发送消息成功,server接收并打印出来了。 client第二次发送消息没成功并且结束程序了,server没接收到消息,保持继续监听。 我用GDB调试时,发现client第二次发送消息时,client收到SIGPIPE(Broken Pipe)信号。server明明还监听着,而且再次启动client还是第一次成功,第二次失败退出。 同样的,当client因为断开(关闭了网络描述符sfd,或者ctrl+c/ctrl+\异常断开),server端也产生SIGPIPE信号。 分析: TCP协议是端到端的传输控制协议,之所以是“端到端”的协议,是因为”路由“是由IP协议负责的,TCP协议负责为两个通信端点提供可靠性保证,这个可靠性不是指一个端点发送的数据,另一个端点肯定能收到(这显然是不可能的),而是指,数据的可靠投递或者故障的可靠通知。 所谓的“端到端”,指的是在通信两端之间建立了一个 全双工 的通信 管道 ,既然是管道,就不得不了解管道。 管道的特点: 管道是半双工的,数据只能向一个方向流动