当前位置: 首页 > news >正文

皓丽智能会议平板官网/福州百度推广优化排名

皓丽智能会议平板官网,福州百度推广优化排名,北京外包公司名单,临沂个人做网站文章目录 1.1 gdb 调试回顾1.1.1 gdb list 命令介绍 1.2 反汇编命令 dis 介绍1.2.1 如何设置 gdb 汇编代码的格式 1.1 gdb 调试回顾 在GNU调试器(GDB)中,有许多命令可以帮助我们调试应用程序。 gdb: 这是一个强大的Unix下的程序调试工具。以…

文章目录

    • 1.1 gdb 调试回顾
      • 1.1.1 gdb list 命令介绍
    • 1.2 反汇编命令 dis 介绍
      • 1.2.1 如何设置 gdb 汇编代码的格式

1.1 gdb 调试回顾

在GNU调试器(GDB)中,有许多命令可以帮助我们调试应用程序。
gdb: 这是一个强大的Unix下的程序调试工具。以下是使用gdb的一个简单示例:

$ gdb ./test

在这个例子中,我们启动了gdb并将我们的程序test作为参数传递。


可执行程序 test 是由下面代码使用gcc -g -O0 test.c -o test编译出来:

#include<stdio.h>
#include<stdlib.h>static int bar(void)
{char *p = NULL;printf("I am bar,I will core dump\n");printf("%s",p);*p =0x0;return 0;
}static int foo(void)
{int i ;printf("I am foo,I will call bar\n");bar();return 0;
}int main(void)
{printf("I am main, I wll can foo\n");foo();return 0;
}

1.1.1 gdb list 命令介绍

llist: llist 命令用于显示当前源代码的行列表,包括当前行以及周围的几行代码。这对于查看代码的上下文非常有用。

例如,你可以使用llist命令来显示当前行及周围的10行代码:

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...
(gdb) list 10
5       {
6           char *p = NULL;
7
8           printf("I am bar,I will core dump\n");
9           printf("%s", p);
10
11          *p = 0x0;
12
13          return 0;
14      }
(gdb)

这将显示源代码的当前行周围的文本。

1.2 反汇编命令 dis 介绍

dis/disassemble: 这个命令用于查看汇编代码。例如,我们可以使用以下命令查看当前函数的汇编代码:

(gdb) disassemble

或者查看指定函数的汇编代码:

[11:01:22]sam@codingcos-sam-laptop (*^~^*) ~/test> gdb test
GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:<http://www.gnu.org/software/gdb/documentation/>.For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...
(gdb) dis foo
Bad breakpoint number 'foo'
(gdb)

从上面的信息可以看到gdb并没有对函数 foo 进行反汇编,而是报出错误“Bad breakpoint number ‘foo’”,甚是疑惑!!!, 网上搜了一大圈也没找到原因!!

后来发现是在使用gdb时没有设置断点导致的,如果按照下面方式,则可以进行反汇编

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...
(gdb) b foo
Breakpoint 1 at 0x11bd: file test.c, line 19.
(gdb) dis foo
Bad breakpoint number 'foo'
(gdb) disassemble foo
Dump of assembler code for function foo:0x00000000000011b5 <+0>:     endbr640x00000000000011b9 <+4>:     push   %rbp0x00000000000011ba <+5>:     mov    %rsp,%rbp0x00000000000011bd <+8>:     lea    0xe5f(%rip),%rax        # 0x20230x00000000000011c4 <+15>:    mov    %rax,%rdi0x00000000000011c7 <+18>:    call   0x1060 <puts@plt>0x00000000000011cc <+23>:    call   0x1169 <bar>0x00000000000011d1 <+28>:    mov    $0x0,%eax0x00000000000011d6 <+33>:    pop    %rbp0x00000000000011d7 <+34>:    ret
End of assembler dump.

但是目前还不清楚为何使用 dis 命令不生效。


如下是使用 arm gdb 的反汇编示例(前提要有arm gcc 编译出来的 .o文件):

arm-none-eabi-gdb ./build/bsp/sam/sam_demo/common/soc.o
This GDB was configured as "--host=x86_64-linux-gnu --target=arm-none-eabi".
Reading symbols from ./build/bsp/sam/sam_demo/common/soc.o...
(gdb) b reboot
Breakpoint 1 at 0x214: file /mnt/user_home/sam/rt-thread/bsp/sam/sam_demo/common/soc.c, line 36.
(gdb) disassemble reboot
Dump of assembler code for function reboot:0x00000208 <+0>:     push    {r7}0x0000020a <+2>:     sub     sp, #200x0000020c <+4>:     add     r7, sp, #00x0000020e <+6>:     mov     r3, r00x00000210 <+8>:     str     r1, [r7, #0]0x00000212 <+10>:    strb    r3, [r7, #7]0x00000214 <+12>:    ldr     r3, [pc, #24]   ; (0x230 <reboot+40>)0x00000216 <+14>:    str     r3, [r7, #12]0x00000218 <+16>:    dmb     sy0x0000021c <+20>:    ldr     r2, [pc, #20]   ; (0x234 <reboot+44>)0x0000021e <+22>:    ldr     r3, [r7, #12]0x00000220 <+24>:    str     r3, [r2, #0]0x00000222 <+26>:    nop0x00000224 <+28>:    adds    r7, #200x00000226 <+30>:    mov     sp, r70x00000228 <+32>:    ldr.w   r7, [sp], #40x0000022c <+36>:    bx      lr0x0000022e <+38>:    nop0x00000230 <+40>:    lsls    r3, r4, #120x00000232 <+42>:    movs    r0, #33 ; 0x210x00000234 <+44>:    asrs    r0, r0, #20x00000236 <+46>:    mov     r1, r0
End of assembler dump.
(gdb)

另外一种查看汇编代码的方式是使用 x 命令,如下显示 pc 开始的 3 条指令:

Breakpoint 1, foo () at test.c:19
19          printf("I am foo,I will call bar\n");
(gdb) x/3i $pc
=> 0x5555555551bd <foo+8>:      lea    0xe5f(%rip),%rax        # 0x5555555560230x5555555551c4 <foo+15>:     mov    %rax,%rdi0x5555555551c7 <foo+18>:     call   0x555555555060 <puts@plt>
(gdb)

arm gdb 反汇编示例
查看0x0地址开始后面的10条汇编:

arm-none-eabi-gdb ./build/bsp/sam/sam_demo/common/soc.o
...
(gdb) x/3i 0x00x0 <__NVIC_SetPriority>:    push    {r7}0x2 <__NVIC_SetPriority+2>:  sub     sp, #120x4 <__NVIC_SetPriority+4>:  add     r7, sp, #0
(gdb) x/10i 0x000000000x0 <__NVIC_SetPriority>:    push    {r7}0x2 <__NVIC_SetPriority+2>:  sub     sp, #120x4 <__NVIC_SetPriority+4>:  add     r7, sp, #00x6 <__NVIC_SetPriority+6>:  mov     r3, r00x8 <__NVIC_SetPriority+8>:  str     r1, [r7, #0]0xa <__NVIC_SetPriority+10>: strh    r3, [r7, #6]0xc <__NVIC_SetPriority+12>: ldrsh.w r3, [r7, #6]0x10 <__NVIC_SetPriority+16>:        cmp     r3, #00x12 <__NVIC_SetPriority+18>:        blt.n   0x2a <__NVIC_SetPriority+42>0x14 <__NVIC_SetPriority+20>:        ldr     r3, [r7, #0]
(gdb)

1.2.1 如何设置 gdb 汇编代码的格式

GDB 主要支持两种汇编代码格式:

  • AT&T风格:这是GDB的默认汇编代码格式,是在Unix和GNU系统中常见的格式。在AT&T风格的汇编代码中,操作数的顺序是“目标”,立即数绝对地址值以美元符号"$"作为前缀,寄存器名称以百分号"%"作为前缀。

  • Intel风格:这是在Intel文档和Windows环境中常见的格式。在Intel风格的汇编代码中,操作数的顺序是“目标”,立即数绝对地址没有特殊的前缀,寄存器名称也没有特殊的前缀。

可以使用 show disassembly-flavor 命令查看当前的汇编代码风格。例如:

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...
(gdb) dis foo
Bad breakpoint number 'foo'
(gdb) show disassembly-flavor
The disassembly flavor is "att".
(gdb)

可以看到默认是 AT&T风格。

如果你想要改变汇编代码风格,你可以使用 set disassembly-flavor 命令来设置新的风格。例如,如果你想要设置成Intel风格,你可以这样做:

(gdb) set disassembly-flavor intel

如果你想要设置成AT&T风格,你可以这样做:

(gdb) set disassembly-flavor att

相关文章:

ARM Linux 系统稳定性分析入门及渐进 13 -- gdb 反汇编 disassemble 命令详细介绍及举例】

文章目录 1.1 gdb 调试回顾1.1.1 gdb list 命令介绍 1.2 反汇编命令 dis 介绍1.2.1 如何设置 gdb 汇编代码的格式 1.1 gdb 调试回顾 在GNU调试器&#xff08;GDB&#xff09;中&#xff0c;有许多命令可以帮助我们调试应用程序。 gdb: 这是一个强大的Unix下的程序调试工具。以…...

python连接Microsoft SQL Server 数据库

python代码 Author: tkhywang 2810248865qq.com Date: 2023-08-21 11:22:24 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-08-21 11:29:30 FilePath: \PythonProject02\Microsoft SQL Server 数据库.py Description: 这是默认设置,请设置customMade, 打开koroFi…...

docker可视化工具

安装Portainer 官方安装说明&#xff1a;https://www.portainer.io/installation/ [rootubuntu1804 ~]#docker pull portainer/portainer[rootubuntu1804 ~]#docker volume create portainer_data portainer_data [rootubuntu1804 ~]#docker run -d -p 8000:8000 -p 9000:90…...

MySQL 用户管理操作

目录 一、用户管理概述 二、用户管理 1、创建用户 2、删除用户 三、账户密码管理 1、root用户修改自己的密码 2、ROOT用户修改其他普通用户密码 3、普通用户修改自己的密码 4、ROOT用户密码忘记解决办法 1&#xff09;Linux系统 2&#xff09;windows系统 四、用户权…...

【python办公自动化】PysimpleGUI中的popup弹窗中的按钮设置居中

PysimpleGUI中的popup弹窗中的按钮设置居中 背景问题解决背景 默认的popup弹窗中的OK按钮是在最下面偏左侧一些,有时需要将按钮放置居中 问题解决 首先找到pysimplegui源代码文件中popup的部分 然后定位到19388行,源文件内容如下 关于popup弹窗OK按钮的设置,将pad属性…...

postgresql 同步流复制两个相关参数synchronous_commit 和 synchronous_standby_names

一&#xff1a;synchronous_commit 1.synchronous_commit参数含义 这个参数用来设置事务提交返回客户端之前&#xff0c;一个事务是否需要等待 WAL 记录被写入磁盘。合法的值是{local,remote_write,remote_apply,on,off}。默认设置是on。 2.各可选值含义 2.1 local 当事务…...

运算放大器发展史

在内部集成了一个补偿电容 MPS公司OP07推出后&#xff0c;大受欢迎。各家厂商都推出了自己的 这4款都是可以替换的...

LVS+Keepalived 实验

Keepalived 是什么 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案&#xff0c;可以解决静态路由出现的单点故障问题的一款检查工具 在一个LVS服务集群中通常有主服务器&#xff08;MASTER&#xff09;和备份服务器&#xff08;BACKUP&#xff09;两种角色的服务器…...

FreeSWITCH 1.10.10 简单图形化界面1 - docker/脚本/ISO镜像安装

FreeSWITCH 1.10.10 简单图形化界面1 - docker/脚本/ISO镜像安装 0. 界面预览1. Docker安装1.1 下载docker镜像1.2 启动docker镜像1.3 登录 2. 脚本安装2.1 下载2.2 安装2.3 登录2.4 卸载程序 3. 镜像安装3.1 下载镜像3.2 安装镜像3.3 登录 0. 界面预览 http://myfs.f3322.net…...

内网渗透神器CobaltStrike之权限提升(七)

Uac绕过 常见uac攻击模块 UAC-DLL UAC-DLL攻击模块允许攻击者从低权限的本地管理员账户获得更高的权限。这种攻击利用UAC的漏洞&#xff0c;将ArtifactKit生成的恶意DLL复制到需要特权的位置。 适用于Windows7和Windows8及更高版本的未修补版本 Uac-token-duplication 此攻…...

使用haproxy搭建web架构

haproxy HAProxy是一个免费的负载均衡软件&#xff0c;可以运行于大部分主流的Linux操作系统上。 HAProxy提供了可以在七层和四层两种负载均衡能力&#xff0c;它可以提供高可用性、负载均衡、及基于TCP和HTTP应用的代理。适用于负载大的Web站点&#xff0c;在运行在硬件上可…...

Java基础之IO流File类创建及删除

1.File类概述及构造方法 2.File类创建功能 文件创建成功&#xff01; 如果文件不存在&#xff0c;就创建文件&#xff0c;并返回true 如果文件存在&#xff0c;就不创建文件&#xff0c;并返回false 如果文件夹不存在&#xff0c;就创建文件夹&#xff0c;并返回true 如果文件…...

高速道路监控:工业路由器助力高速监控远程管理与维护

工业路由器在物联网应用中扮演着重要的角色。物联网的发展使得大量设备和传感器能够互联互通&#xff0c;而工业路由器作为连接这些设备和网络的中间桥梁&#xff0c;承担着数据传输和安全管理的重要责任。 工业路由器能够为高速监控提供网络功能&#xff0c;实现户外无线网络部…...

【校招VIP】前端基础之post和get

考点介绍&#xff1a; get和post 是网络基础&#xff0c;也是每个前端同学绕不过去的小问题&#xff0c;但是在校招面试中很多同学在基础回答中不到位&#xff0c;或者倒在引申问题里&#xff0c;就丢分了。 『前端基础之post和get』相关题目及解析内容可点击文章末尾链接查看…...

如何合理设计API接口?

本规范仅适用于由服务器端发起调用请求、POST提交数据以及GET请求文本数据结果的API,统一采用UTF-8编码规则,采用JSON格式响应。 URL定义 API 服务接口应提供REST风格的HTTP(HTTPS) 接口: {protocol}://{domain}:{port}/{app}/{controller}/{action}?{query} 变量 含义 示…...

Jsp 解决out.print()输出多出空行

一、原因 在 JSP 中&#xff0c;HTML 标签和 JSP 指令之外的内容会被当作文本处理&#xff0c;包括空行、空格和制表符等。当 JSP 引擎解析 JSP 页面时&#xff0c;会将这些文本内容原封不动地输出到响应中。 http响应 二、解决方法 在Jsp页面最前端添加 <% page trimDir…...

SMC状态机 讲解2 从模型到SMC

SMC状态机 讲解2 从模型到SMC 1、实例化有限状态机&#xff08;FSM)2、简单转换 Simple Transition3、外部环回转换 External Loopback Transition4、内部环回转换 Internal Loopback Transition5、转换动作6、转换Guard7、转换参数8、Entry 和 Exit动作9、Push 转换10、Pop转换…...

MyBatis-Plus的使用

MyBatis-Plus 1、mybatis-plus介绍 官网&#xff1a;https://baomidou.com/ MyBatis-Plus &#xff08;简称 MP&#xff09;是一个MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。MyBatis-Plus提供了通用的mapper…...

板卡设计+硬件每日学习十个知识点(44)23.8.24 (检测单元设计,接口部分设计,板卡电源输入设计,电源检测电路)

文章目录 1.检测单元介绍&#xff08;使用GD32单片机&#xff09;2.GD32的最小系统板3.GD32的温度监测4.GD32的电压监测和电流监测5.GD32的布线6.接口部分设计7.板卡电源输入设计8.电源检测电路 1.检测单元介绍&#xff08;使用GD32单片机&#xff09; 答&#xff1a; 首先要为…...

jmeter HTTP信息头管理器

首先&#xff0c;打开JMeter并创建一个新的测试计划。右键单击测试计划&#xff0c;选择"添加" > “线程组”&#xff0c;然后在线程组上右键单击&#xff0c;选择"添加" > “Sampler” > “HTTP请求”。 在HTTP请求中填写服务器的URL和其他必要…...

各种中间件的默认端口

面试时会忘记个别中间件端口 docker&#xff1a;2375 nacos&#xff1a;8848 redis&#xff1a;6379 rabbitMq: 5672(后台配置的端口)15672&#xff08;web管理界面&#xff09;账号&#xff1a;guest15674&#xff08;web STOMP插件&#xff09;&#xff1a;通过WebSocket…...

leetcode303. 区域和检索 - 数组不可变(java)

前缀和数组的应用 区域和检索 - 数组不可变题目描述前缀和数组代码演示 区域和检索 - 数组不可变 难度 - 简单 原题链接 - 区域和检索 - 数组不可变 题目描述 给定一个整数数组 nums&#xff0c;处理以下类型的多个查询: 计算索引 left 和 right &#xff08;包含 left 和 righ…...

PHP 安装Composer,vue前端依赖包

电脑安装Composer 官网下载&#xff1a;https://getcomposer.org/Composer-Setup.exe 后端安装&#xff1a; 检查是否安装依赖&#xff1a; 安装Composer install 或 Composer i 前端安装&#xff1a; yarn install 安装依赖...

OpenCV项目开发实战--基于Python/C++实现鼠标注释图像和轨迹栏来控制图像大小

鼠标指针是图形用户界面 (GUI) 中的关键组件。没有它,您就无法真正考虑与 GUI 进行交互。那么,让我们深入了解 OpenCV 中鼠标和轨迹栏的内置函数。我们将演示如何使用鼠标来注释图像,以及如何使用轨迹栏来控制图像的大小 我们将使用下图来演示 OpenCV 中鼠标指针和轨迹栏功能…...

❤ Vue使用Eslint检测报错问题和解决

❤ Vue使用Eslint检测报错问题和解决 1、 关闭Eslint检测 关闭ESLint语法检测即可&#xff1a;具体步骤如下&#xff1a; 第一步我们打开setting设置&#xff1a; 打开左上角的file&#xff0c;然后点击setting 接下来进入setting以后我们来看下面操作&#xff1a; eol-l…...

解决运行在微信小程序中报[ app.json 文件内容错误] app.json: app.json 未找到(env: Windows,mp,1.05.2204

找到project.config.json文件夹 添加 "miniprogramRoot": "unpackage/dist/dev/mp-weixin/", 即可...

python 基础 -- 安装Python模块

作为一个流行的开源开发项目&#xff0c;Python拥有一个由贡献者和用户组成的活跃支持社区&#xff0c;他们还根据开源许可条款向其他Python开发人员提供他们的软件。 这允许Python用户有效地共享和协作&#xff0c;从其他人已经创建的常见(有时甚至是罕见的!)问题的解决方案中…...

C语言实现状态机

关于状态机&#xff0c;基础的知识点可以自行理解&#xff0c;讲解的很多&#xff0c;这里主要是想写一个有限状态机FSM通用的写法&#xff0c;目的在于更好理解&#xff0c;移植&#xff0c;节省代码阅读与调试时间&#xff0c;体现出编程之美。 传统的实现方案 if...else : …...

交叉编译工具链arm-linux-gnueabihf的安装-ubuntu 20.04

前面下载安装步骤参考该博主的文章 http://t.csdn.cn/ZbjFX 另&#xff1a;本人对所遇到的环境变量的配置问题作补充 1.修改环境变量 建议直接在.bashrc文件作修改 &#xff0c;修改方式相同 ( vi :视自己的编辑器而定) sudo vi ~/.bashrc 2.修改环境变量后&#xff0c;可…...

Java的类加载器

类加载 1、ClassLoader 用来加载 Class 文件 2、 系统内置的ClassLoader 通过双亲委托加载指定目录下的class和资源 3、 可以自定义ClassLoader 一般覆盖findClass() 4、ContextClassLoader 与线程相关&#xff0c;可以获取和设置&#xff0c;可以绕过双亲委托的机制。 三个类…...