当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : eglibc 2.15/2.19 运行程序的段错误咨询?
帖子发表于 : 2016-08-01 15:49 

注册: 2016-08-01 15:43
帖子: 5
系统: Debian 7
送出感谢: 2
接收感谢: 0 次
为什么 eglibc 2.15/2.19 运行同一个程序会出现不同的段错误提示,咨询如何在终端下调试静态库程序的段错误。
1:系统环境 Debian 7
$ uname -a
Linux gavin-Inspiron 3.2.0-4-amd64 #1 SMP Debian 3.2.81-1 x86_64 GNU/Linux
$ ./version-check.sh
bash, 版本 4.2.37(1)-release
Binutils: (GNU Binutils for Debian) 2.22
bison (GNU Bison) 2.5
bzip2, Version 1.0.6, 6-Sept-2010.
Coreutils: 8.13
diff (GNU diffutils) 3.2
find (GNU findutils) 4.4.2
GNU Awk 4.0.1
gcc (Debian 4.7.2-5) 4.7.2
g++ (Debian 4.7.2-5) 4.7.2
GNU C Library (Debian EGLIBC 2.13-38+deb7u11) stable
grep (GNU grep) 2.12
gzip 1.5
Linux 3.2.0-4-amd64
GNU Make 3.81
ncurses 5.9.20110404
patch 2.6.1
GNU sed 版本 4.2.1
tar (GNU tar) 1.26
makeinfo (GNU texinfo) 4.13
xz (XZ Utils) 5.1.0alpha
Compilation successful

默认环境运行程序会有提示需要eglibc 2.14
$ ./ashdict64
./ashdict64: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by ./ashdict64)
$ file ashdict64
ashdict64: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped
$ readelf -h ashdict64
ELF Header:
Magic: 7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - GNU
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x55b660
Start of program headers: 64 (bytes into file)
Start of section headers: 0 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 2
Size of section headers: 64 (bytes)
Number of section headers: 0
Section header string table index: 0

2: 编译安装eglibc 2.15
编译配置
echo "libc_cv_ssp=no" > config.cache
BUILD_CC="gcc" CC="x86_64-linux-gnu-gcc -m64 -g -O2" \
AR="/home/gavin/opt/bin/x86_64-pc-linux-gnu-ar" \
RANLIB="/home/gavin/opt/bin/x86_64-pc-linux-gnu-ranlib" \
../libc/configure --prefix=/home/gavin/opt/eglibc-2.15 \
--host=x86_64-pc-linux-gnu \
--disable-profile --with-tls --enable-kernel=2.6.32 --with-__thread \
--with-binutils=/home/gavin/opt/bin --with-headers=/home/gavin/opt/include \
--enable-obsolete-rpc --cache-file=config.cache
eglibc 2.15可以正常编译安装

此时在终端设置环境变量,可以成功运行ashdict64
$ PATH=/home/gavin/opt/eglibc-2.15/bin:$PATH
$ LD_LIBRARY_PATH=/home/gavin/opt/eglibc-2.15/lib:/lib/x86_64-linux-gnu:/usr/lib:$LD_LIBRARY_PATH
$ export PATH
$ export LD_LIBRARY_PATH
$ ./ashdict64

但是如果这样运行,就会提示段错误
$ ~/opt/eglibc-2.15/lib/ld-linux-x86-64.so.2 ./ashdict64
段错误

$ dmesg 提示
[55366.294758] ld-linux-x86-64[10418]: segfault at 8 ip 00007fe2af86a30a sp 00007ffdc4e5c9e0 error 4 in ld-2.15.so[7fe2af85f000+21000]

如果运行ls,反而一切正常
$ ~/opt/eglibc-2.15/lib/ld-linux-x86-64.so.2 /bin/ls
ashdict64 postfix.txt run weak.txt prefix.txt version-check.sh

如果使用gdb 调试ashdict64 却能正常运行
$ ~/opt/eglibc-2.15/lib/ld-linux-x86-64.so.2 /usr/bin/gdb $PWD/ashdict64
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 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".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /media/Datapart/dict/ashdict64...(no debugging symbols found)...done.
(gdb) run
Starting program: /media/Datapart/dict/ashdict64
[Inferior 1 (process 10550) exited normally]
(gdb)

$ strings ~/opt/eglibc-2.15/lib/libc.so.6 |grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_PRIVATE
GNU C Library (EGLIBC) stable release version 2.15, by Roland McGrath et al.

3: 编译安装eglibc 2.19
编译配置与eglibc 2.15相同,更换安装路径
echo "libc_cv_ssp=no" > config.cache
BUILD_CC="gcc" CC="x86_64-linux-gnu-gcc -m64 -g -O2" \
AR="/home/gavin/opt/bin/x86_64-pc-linux-gnu-ar" \
RANLIB="/home/gavin/opt/bin/x86_64-pc-linux-gnu-ranlib" \
../libc/configure --prefix=/home/gavin/opt/eglibc-2.19 \
--host=x86_64-pc-linux-gnu \
--disable-profile --with-tls --enable-kernel=2.6.32 --with-__thread \
--with-binutils=/home/gavin/opt/bin --with-headers=/home/gavin/opt/include \
--enable-obsolete-rpc --cache-file=config.cache

新开终端设置环境变量,直接运行ls提示段错误
$ PATH=/home/gavin/opt/eglibc-2.19/bin:$PATH
$ LD_LIBRARY_PATH=/home/gavin/opt/eglibc-2.19/lib:/lib/x86_64-linux-gnu:/usr/lib:$LD_LIBRARY_PATH
$ export PATH
$ export LD_LIBRARY_PATH
$ ls
段错误
$ dmesg 提示
[56507.895802] ls[10643]: segfault at 7f57ee304f1a ip 00007f57eeb8caeb sp 00007ffed567d670 error 7 in ld-2.13.so[7f57eeb7a000+20000]

但是这样运行ls,正常

$ ~/opt/eglibc-2.19/lib/ld-linux-x86-64.so.2 /bin/ls
ashdict64 postfix.txt run weak.txt prefix.txt version-check.sh

运行ashdict64,会提示段错误
$ ./ashdict64
段错误
$ dmesg 提示
[56854.635488] ashdict64[10695]: segfault at 7fabd740bf1a ip 00007fabd864caeb sp 00007fffa57d65d0 error 7 in ld-2.13.so[7fabd863a000+20000]

但是如果这样运行,还是会提示段错误

$ ~/opt/eglibc-2.19/lib/ld-linux-x86-64.so.2 ./ashdict64
段错误
$ dmesg 提示
[56976.095697] ld-linux-x86-64[10697]: segfault at 8 ip 00007f7b0ecefc8a sp 00007ffc28f36e50 error 4 in ld-2.19.so[7f7b0ece5000+20000]

使用gdb 调试ashdict64,无法运行
$ ~/opt/eglibc-2.19/lib/ld-linux-x86-64.so.2 /usr/bin/gdb $PWD/ashdict64
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 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".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /media/Datapart/dict/ashdict64...(no debugging symbols found)...done.
(gdb) run
Starting program: /media/Datapart/dict/ashdict64
During startup program terminated with signal SIGSEGV, Segmentation fault.
(gdb)

$ strings ~/opt/eglibc-2.19/lib/libc.so.6 |grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_PRIVATE
GNU C Library (EGLIBC) stable release version 2.19, by Roland McGrath et al.

4: 为什么会出现上述问题。请教,如何正确设置,能让ashdict64运行在eglibc-2.19下呢。上述问题是怎么产生的?如何调试这样的问题呢?objdump 无法反编译ashdict64?


附件:
ashdict64.tar.gz [958.78 KiB]
被下载 3 次
页首
 用户资料  
 
2 楼 
 文章标题 : Re: eglibc 2.15/2.19 运行程序的段错误咨询?
帖子发表于 : 2016-08-01 16:35 

注册: 2009-08-04 16:33
帖子: 16891
送出感谢: 21
接收感谢: 1826
引用:
段错误
为什么会出现上述问题。

程式設計時 對於內存區段間隔沒有做好
參閱
1. https://zh.wikipedia.org/wiki/%E8%A8%98 ... F%E8%AA%A4
記憶體區段錯誤
2. https://en.wikipedia.org/wiki/Segmentation_fault
Segmentation fault


页首
 用户资料  
 
3 楼 
 文章标题 : Re: eglibc 2.15/2.19 运行程序的段错误咨询?
帖子发表于 : 2016-08-02 19:53 
头像

注册: 2008-09-18 13:11
帖子: 2781
送出感谢: 1
接收感谢: 453
这东西用upx压缩过了,你先解压出来再试试?很可能是运行时动态解压缩的锅



_________________
评价: 3.7% earthGavinLee
 
页首
 用户资料  
 
4 楼 
 文章标题 : Re: eglibc 2.15/2.19 运行程序的段错误咨询?
帖子发表于 : 2016-08-03 15:42 

注册: 2016-08-01 15:43
帖子: 5
系统: Debian 7
送出感谢: 2
接收感谢: 0 次
astolia 写道:
这东西用upx压缩过了,你先解压出来再试试?很可能是运行时动态解压缩的锅

大神分析的对,问题是出现在UPX压缩上,解压后,正常。能问一下如何知道文件是UPX压缩过的呢


页首
 用户资料  
 
5 楼 
 文章标题 : Re: eglibc 2.15/2.19 运行程序的段错误咨询?
帖子发表于 : 2016-08-03 16:05 

注册: 2016-08-01 15:43
帖子: 5
系统: Debian 7
送出感谢: 2
接收感谢: 0 次
astolia 写道:
这东西用upx压缩过了,你先解压出来再试试?很可能是运行时动态解压缩的锅


大神分析的对,是UPX惹得祸。解压后,程序已经正常运行。另外想知道,如何分析文件是UPX压缩的?我对比文件头看不出来呀?


附件:
1.png
1.png [ 61.15 KiB | 被浏览 454 次 ]

页首
 用户资料  
 
6 楼 
 文章标题 : Re: eglibc 2.15/2.19 运行程序的段错误咨询?
帖子发表于 : 2016-08-03 17:37 

注册: 2016-08-01 15:43
帖子: 5
系统: Debian 7
送出感谢: 2
接收感谢: 0 次
使用IDA 查找upx关键字可以知道,大神您是根据什么知道是UPX压缩了呢


附件:
2.png
2.png [ 13.51 KiB | 被浏览 421 次 ]

页首
 用户资料  
 
7 楼 
 文章标题 : Re: eglibc 2.15/2.19 运行程序的段错误咨询?
帖子发表于 : 2016-08-03 19:49 
头像

注册: 2008-09-18 13:11
帖子: 2781
送出感谢: 1
接收感谢: 453
readelf -S ashdict64什么section都没有,99.99999%是加了壳
elf的加壳工具就那么两三个,upx嫌疑已经最大了。
文件头你多看几行就可以看到特征字串
附件:
Screenshot.png
Screenshot.png [ 29.04 KiB | 被浏览 375 次 ]




_________________
评价: 3.7% earthGavinLee
 
页首
 用户资料  
 
8 楼 
 文章标题 : Re: eglibc 2.15/2.19 运行程序的段错误咨询?
帖子发表于 : 2016-08-04 22:14 

注册: 2016-08-01 15:43
帖子: 5
系统: Debian 7
送出感谢: 2
接收感谢: 0 次
astolia 写道:
readelf -S ashdict64什么section都没有,99.99999%是加了壳
elf的加壳工具就那么两三个,upx嫌疑已经最大了。
文件头你多看几行就可以看到特征字串
附件:
Screenshot.png

明白了大神,谢谢。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译