博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针和字符串和字符串常量、用gdb来获取非法内存中的内容
阅读量:6901 次
发布时间:2019-06-27

本文共 1172 字,大约阅读时间需要 3 分钟。

例程1

#include
int main(void){ char *s="hello"; printf("%s\n", s); s[0]="H" //因为s指针指向的字符串"hello"是字符串常量,所以不能通过指针进行更改, //所以这里会产生段错误 printf("%s\n", s); return 0;}

例程2

#include
#include
#include
int main(void){ char *s = (char *)malloc(6*sizeof(char)); strcpy(s,"hello"); printf("%s\n", s); s[0] = 'H'; //因为为s分配了动态内存,所以更改可以通过s指针进行更改 printf("%s\n", s); return 0;}

例程3

字符串开始位置没有规定,但是规定必须以'0'作为结尾标识符

int main(void){    char *s="hello";    printf("%s\n", s);    //打印出hello    printf("%s\n", &s[1]);    //打印出ello    printf("%s\n", &s[1]);    //打印出llo    //...    printf("%s\n", &s[4]);    //打印出o    return 0;}

编译调试例程3看看效果

假设例程3命名为string.c

用命令gcc -g -o string string来编译程序

再用gdb ./string来调试程序

break main

run
next
next

现在步进到想要调试的位置

print s

显示结果$1 = 0x40061c "hello"

print s+1

显示结果$2 = 0x40061d "ello"

print s[1]

显示结果$3= 0x40061d 'e'

注意区别 print s+1 与print s[1]的差异,其中print s+1等价于 print &s[1]

上面3条print命令都是访问string程序中合法的内存区域

print s+10

显示的结果可能是$4 = 0x400626 "003;("

这条print语句其实是去访问了在string中非法的内存区域(越界访问),但是通过gdb来访问也是可以获取相关信息的,有时候可以这样通过gdb来来获取某块以前使用过现在不合法但是可能有一些有用的信息的内存来获取一些有用信息

转载地址:http://ykvdl.baihongyu.com/

你可能感兴趣的文章
oracle经常无响应,Oracle无响应故障
查看>>
php xml 转换数组函数,php xml转换成数组格式
查看>>
oracle12c不买会咋样,ORACLE 12c - “不是单一群体功能”
查看>>
php simplexml_load_file 详解,php中simplexml_load_file函数用法实例讲解
查看>>
linux登录用户who,技术|Linux who 命令 – 显示系统登录者
查看>>
linux内核下载 2.6.32,linux内核升级到2.6.32
查看>>
client linux amd64,linux 下安装minio并配置
查看>>
linux中配置nginx,linux中编译安装和配置nginx
查看>>
Linux循环sql调用,shell中使用SQL实现查询
查看>>
linux中make命令大全,Linux中的命令 make -f 是什么意思
查看>>
qcustomplot在Linux开发板,QCustomplot的使用以及编译动态链接库的过程
查看>>
aes逆字节替换C语言,AES加密算法之字节替换操作
查看>>
2017福建省c语言编程题,[蓝桥杯][2017年第八届真题]九宫幻方-题解(C语言代码)
查看>>
c语言实验九结构体和共用体的区别,[C语言程序设计实验九结构体和共用体答案西北民大电气院.doc...
查看>>
android刷机工具mac版,刷机精灵mac版
查看>>
android+如何封装功能,Android - 如何封装 opengl 流程
查看>>
android c 高级编程源码,Objective-C高级编程
查看>>
android 剪贴板增强工具,剪切板增强工具(ClipboardFusion Pro)
查看>>
opencv android盒子,入门免费阅读_深入OpenCV Android应用开发免费全文_百度阅读
查看>>
html中加入定位按钮,HTML CSS按钮定位
查看>>