函数的错误应用导致的致命错误(一)——strcpy

news/2024/11/18 0:33:26/




        对一个coder来说,记录一些自己所遇到的错误及解决方法是很重要的,写此系列博文,以备后用,也希望对大家有所帮助。


下面是我在调试一个程序是碰到的错误:

错误log:

F/libc    ( 7081): @@@ ABORTING: invalid address or address of corrupt block 0x736ab1a8 passed to dlfree 
F/libc    ( 7081): Fatal signal 11 (SIGSEGV), thread 7130 (UnityMain) 
I/DEBUG   ( 3309): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
I/DEBUG   ( 3309): Build fingerprint: 'google/mantaray/manta:4.3/JWR66V/737497:user/release-keys' 
I/DEBUG   ( 3309): Revision: '8' 
I/DEBUG   ( 3309): pid: 7081, tid: 7130, name: UnityMain  >>> com.jellk.cityrun3d2 <<< 
I/DEBUG   ( 3309): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad 
I/DEBUG   ( 3309): Abort message: '@@@ ABORTING: invalid address or address of corrupt block 0x736ab1a8 passed to dlfree' 
I/DEBUG   ( 3309):     r0 00000027  r1 71c5e8e0  r2 00000008  r3 deadbaad 
I/DEBUG   ( 3309):     r4 00000000  r5 75969584  r6 40058000  r7 736ab1b0 
I/DEBUG   ( 3309):     r8 72000e10  r9 73ba887c  sl 72000e10  fp 00000000 
I/DEBUG   ( 3309):     ip 00000001  sp 75969580  lr 4008cd7b  pc 4008a2e4  cpsr 600f0030 
I/DEBUG   ( 3309):     d0  2064657373617064  d1  736572646461206c 
I/DEBUG   ( 3309):     d2  64646120726f2066  d3  20666f2073736572 
I/DEBUG   ( 3309):     d4  612e312d3264336e  d5  2f6b6361625f6b70 
I/DEBUG   ( 3309):     d6  622f737465737361  d7  2f617461442f6e69 
I/DEBUG   ( 3309):     d8  0000000000000000  d9  0000000000000000 
I/DEBUG   ( 3309):     d10 0000000000000000  d11 0000000000000000 
I/DEBUG   ( 3309):     d12 0000000000000000  d13 0000000000000000 
I/DEBUG   ( 3309):     d14 0000000000000000  d15 0000000000000000 
I/DEBUG   ( 3309):     d16 000000010628d803  d17 0000000000000001 
I/DEBUG   ( 3309):     d18 0000000000000001  d19 fb30000000000000 
I/DEBUG   ( 3309):     d20 fb30000000000025  d21 0000000000000001 
I/DEBUG   ( 3309):     d22 0000000000000061  d23 0000000000000001 
I/DEBUG   ( 3309):     d24 0000000000000000  d25 0000000000000fff 
I/DEBUG   ( 3309):     d26 00000000000000d0  d27 00000000000000d0 
I/DEBUG   ( 3309):     d28 0000007633533000  d29 00000076335330d0 
I/DEBUG   ( 3309):     d30 0000000000000001  d31 0000000000000001 
I/DEBUG   ( 3309):     scr 80000010 
I/DEBUG   ( 3309):  
I/DEBUG   ( 3309): backtrace: 
I/DEBUG   ( 3309):     #00  pc 0001e2e4  /system/lib/libc.so 
I/DEBUG   ( 3309):     #01  pc 0001c4cc  /system/lib/libc.so (abort+4) 
I/DEBUG   ( 3309):     #02  pc 000121bd  /system/lib/libc.so 
I/DEBUG   ( 3309):     #03  pc 00010e75  /system/lib/libc.so (dlfree+1184) 
I/DEBUG   ( 3309):     #04  pc 0000d9c3  /system/lib/libc.so (free+10) 
I/DEBUG   ( 3309):     #05  pc 0015188c  <unknown> 
I/DEBUG   ( 3309):     #06  pc 00153138  <unknown> 
I/DEBUG   ( 3309):     #07  pc 00027e1c  <unknown> 
I/DEBUG   ( 3309):     #08  pc 0018c634  <unknown> 
I/DEBUG   ( 3309):     #09  pc 0000dd80  /data/app-lib/com.jellk.cityrun3d2-1/libmono.so (mono_jit_init_version+40) 
I/DEBUG   ( 3309):     #10  pc 002c0334  <unknown> 
I/DEBUG   ( 3309):     #11  pc 003b15a8  <unknown> 
I/DEBUG   ( 3309):     #12  pc 003b1a2c  <unknown> 
I/DEBUG   ( 3309):     #13  pc 0001dc0c  /system/lib/libdvm.so (dvmPlatformInvoke+112) 
I/DEBUG   ( 3309):     #14  pc 0004de6f  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398) 
I/DEBUG   ( 3309):     #15  pc 00027020  /system/lib/libdvm.so 
I/DEBUG   ( 3309):     #16  pc 0002b5d0  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184) 
I/DEBUG   ( 3309):     #17  pc 0005fe91  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+292) 
I/DEBUG   ( 3309):     #18  pc 0005febb  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20) 
I/DEBUG   ( 3309):     #19  pc 00054c4f  /system/lib/libdvm.so 
I/DEBUG   ( 3309):     #20  pc 0000ca58  /system/lib/libc.so (__thread_entry+72) 
I/DEBUG   ( 3309):     #21  pc 0000cbd4  /system/lib/libc.so (pthread_create+208) 
I/DEBUG   ( 3309):  
I/DEBUG   ( 3309): stack: 
I/DEBUG   ( 3309):          75969540  77df28b0   
I/DEBUG   ( 3309):          75969544  00000000   
I/DEBUG   ( 3309):          75969548  400b4170  /system/lib/libc.so 
I/DEBUG   ( 3309):          7596954c  71c5e8e0   
I/DEBUG   ( 3309):          75969550  00000015   
I/DEBUG   ( 3309):          75969554  4008bd61  /system/lib/libc.so (__sflush+52) 
I/DEBUG   ( 3309):          75969558  400b4264  /system/lib/libc.so 
I/DEBUG   ( 3309):          7596955c  400b41c4  /system/lib/libc.so 
I/DEBUG   ( 3309):          75969560  00000000   
I/DEBUG   ( 3309):          75969564  4008cd7b  /system/lib/libc.so (_fwalk+34) 
I/DEBUG   ( 3309):          75969568  4008c029  /system/lib/libc.so (_cleanup) 
I/DEBUG   ( 3309):          7596956c  75969584  [stack:7130] 
I/DEBUG   ( 3309):          75969570  40058000   
I/DEBUG   ( 3309):          75969574  736ab1b0   
I/DEBUG   ( 3309):          75969578  df002777   
I/DEBUG   ( 3309):          7596957c  e3a070ad   
I/DEBUG   ( 3309):     #00  75969580  400b7204   
I/DEBUG   ( 3309):          75969584  fffffbdf   
I/DEBUG   ( 3309):          75969588  720aa000   
I/DEBUG   ( 3309):          7596958c  0000005a   
I/DEBUG   ( 3309):          75969590  ffffffff   
I/DEBUG   ( 3309):          75969594  00000000   
I/DEBUG   ( 3309):          75969598  00000003   
I/DEBUG   ( 3309):          7596959c  759695c4  [stack:7130] 
I/DEBUG   ( 3309):          759695a0  400b6ff4   
I/DEBUG   ( 3309):          759695a4  400884d0  /system/lib/libc.so (__pthread_clone) 
I/DEBUG   ( 3309):     #01  759695a8  00000000   
I/DEBUG   ( 3309):          759695ac  4007e1c1  /system/lib/libc.so 
I/DEBUG   ( 3309):     #02  759695b0  759699d4  [stack:7130] 
I/DEBUG   ( 3309):          759695b4  00000055   
I/DEBUG   ( 3309):          759695b8  759695c4  [stack:7130] 
I/DEBUG   ( 3309):          759695bc  75969619  [stack:7130] 
I/DEBUG   ( 3309):          759695c0  759699c3  [stack:7130] 
I/DEBUG   ( 3309):          759695c4  20404040   
I/DEBUG   ( 3309):          759695c8  524f4241  /dev/ashmem/dalvik-heap (deleted) 
I/DEBUG   ( 3309):          759695cc  474e4954  /dev/ashmem/dalvik-heap (deleted) 
I/DEBUG   ( 3309):          759695d0  6e69203a  /system/framework/core.odex 
I/DEBUG   ( 3309):          759695d4  696c6176  /dev/ashmem/dalvik-mark-stack (deleted) 
I/DEBUG   ( 3309):          759695d8  64612064  /dev/ashmem/dalvik-mark-stack (deleted) 
I/DEBUG   ( 3309):          759695dc  73657264  [stack:7097] 
I/DEBUG   ( 3309):          759695e0  726f2073  /system/lib/libwebcore.so 
I/DEBUG   ( 3309):          759695e4  64646120  /dev/ashmem/dalvik-mark-stack (deleted) 
I/DEBUG   ( 3309):          759695e8  73736572  /dev/mali0 
I/DEBUG   ( 3309):          759695ec  20666f20   
I/DEBUG   ( 3309):          ........  ........ 
I/DEBUG   ( 3309):  
I/DEBUG   ( 3309): memory near r1: 
I/DEBUG   ( 3309):     71c5e8c0 00000004 71c61bf0 40b51888 71c61e70   
I/DEBUG   ( 3309):     71c5e8d0 00000003 00000007 00000004 0000100b   
I/DEBUG   ( 3309):     71c5e8e0 6d206e49 69616d67 4e4a206e 6e4f5f49   
I/DEBUG   ( 3309):     71c5e8f0 64616f4c 0000000a 2d202020 78616d20   

遇到此问题,我极端纠结,刚开始这么想“既然是libc里面的函数出了问题,那我有什么办法呢?”

最后在网上查看了一下相关问题,看了别人的解决思路,相关链接如下:

http://stackoverflow.com/questions/12246312/fatal-signal-11-and-invalid-heap-address-in-dlfree-error-when-using-glshaderbina

http://stackoverflow.com/questions/19463705/aborting-invalid-heap-address-in-dlfree-addr-0x00000156

看了这些,我可以肯定的是“自己前面的想法是错的,不是libc的问题,是自己的code有问题”,于是就返回去看自己的code(其实是开源项目,很多代码)。

经我调试和一步步排查发现,是自己把strcpy使用错误导致的,这是个很低级的错误,我没有给buf分派足够的空间,直接使用了strcpy(buf, src)。把这个问题改过来之后,此错误就pass了。


最后要说明的是,如果出现上述问题:

第一,肯定是自己code出错。

第二,必须告诉自己,是自己的code出错,不要找借口。

第三,重复第一和第二。

第四,出现这个问题,不一定是strcpy引起的,也许是使用其他函数引起。

第五,strcpy使用错误,有可能引起前面的错误。

第六,欢迎大家拍砖,分享,交流。







http://www.ppmy.cn/news/267481.html

相关文章

ASL CS6211 USB3.2 高速信号中继器芯片|CS6211芯片功能|CS6211参数特性

目前 Type-C凭借其能支持USB 3.2 和 DisplayPort 1.4所需的高比特率&#xff0c;正成为高速数据和高分辨率视频的首选连接器。同时主板设备对retimer的需求也在增加。如果没有retimer&#xff0c;对USB 3.2 Gen 2 (10 Gbit/sec) 的支持通常仅限于几英寸的 PCB 长度&#xff0c;…

LT系列之LT7211芯片简介

LT7211是一种用于虚拟现实/显示应用的高性能C/DP1.2至LVDS芯片。 对于DP1.2输入&#xff0c;LT7211可以配置为1、2、4车道&#xff0c;还支持车道交换功能。自适应均衡使其适用于长电缆应用&#xff0c;最大带宽可达21.6Gbps 对于LVDS输出&#xff0c;LT7211可以配置为单端口、…

第21篇:判断Weblogic详细版本号的方法总结

Part1 前言 在日常的渗透测试、红队评估项目中&#xff0c;中间件层面的漏洞挖掘是非常重要一环&#xff0c;Weblogic中间件在最近几年接连被爆出很多高危漏洞&#xff0c;基本上都是可以直接拿到权限的。主流的Weblogic漏洞包括HTTP协议上的CVE-2017-10271、CVE-2019-2729等&…

DELL VENUE 11 7130解锁功耗墙总结

18年3月份呢入手v11&#xff0c;刚开始使用的时候由于天气并不高&#xff0c;没有出现很严重的降频现象所以整体来看使用的感觉还不错。到了暑假的时候&#xff0c;由于天气炎热&#xff0c;开始频频撞到功耗墙&#xff0c;频率大幅下降到1.0ghz以下&#xff0c;这个时候的电脑…

第二章硬件入门之电容

第二章硬件入门之电容 文章目录 第二章硬件入门之电容一、电容是什么&#xff1f;二、实际应用场景常见电容&#xff1a;1.陶瓷电容&#xff08;无正负极之分&#xff09;1、旁路2、去耦 2.铝电解电容贴片式插件式3.安规电容x电容Y电容 总结 一、电容是什么&#xff1f; **电容…

Linux fdisk分区

在 Linux 系统上对磁盘进行分区操作&#xff0c;使用 fdisk 工具在 /dev/vdb 上分别创建两个 10T 的分区&#xff0c;并将分区格式化为 ext4 文件系统以便于挂载。 以下是步骤&#xff1a; 运行 fdisk 命令并指定要分区的块设备名称&#xff1a; sudo fdisk /dev/vdb首先用 …

天天动听音乐播放器应用android源码下载

给大家分享我刚刚在网上找到的一个很难得的音乐播放器应用源码&#xff0c;天天动听音乐播放器应用android源码下载&#xff0c;喜欢的android开发的朋友可以下载学习看看。 源码下载&#xff1a; http://code.662p.com/view/1635.html

天天动听实现源码

利用业余时间实现一个Android平台上的天天动听音乐播放器。更名为天籁之音播放器&#xff0c;采用天天动的布局&#xff0c;先上几张图&#xff0c;然后把源码奉献给大家。有不明的地方可以多多交流&#xff0c;附上邮箱&#xff1a;quanmingyi126.com 下载源码前可以看看附件的…