关于移动端堆栈信息内存地址符号表解析相关内容

  公司要做一个类似于腾讯Bugly一样的解析移动端崩溃信息内存地址的业务,然后替换掉Bugly,在网上找了这方便的资料发现很少,现在整理了一份,在Linux服务器上的详细解析过程,希望能帮助同样需要的你
 一、前置条件,需要安装一些命令

1、gcc的安装

yum -y install wget bzip2 gcc-c++
mkdir /home/gcc && cd /home/gcc
wget http://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz(离线下载)
tar -zxvf gcc-12.2.0.tar.gz
cd /home/gcc/gcc-12.2.0
./contrib/download_prerequisites
./configure --prefix=/home/gcc/gcc-12.2.0 -disable-multilib
make -j16 && make install
gcc -v
yum -y remove gcc
echo “export GCC_HOME=/home/gcc/gcc-12.2.0” >> /etc/profile
echo “export PATH=$GCC_HOME/bin:$PATH” >> /etc/profile
source /etc/profile

2、cmake安装

tar -zxvf cmake-3.26.1.tar.gz
cd cmake-3.26.1
./bootstrap && make -j4 && sudo make install
export CMAKE_HOME=/home/cmake/cmake-3.26.1
export PATH= P A T H : PATH: PATH:CMAKE_HOME/bin

解决 /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found 丢失问题

strings /usr/lib64/libstdc++.so.6 | grep GLIBC
find / -name “libstdc++.so*”
cp /home/gcc/gcc-12.2.0/prev-x86_64-pc-linux-gnu/libstdc+±v3/src/.libs/libstdc++.so.6.0.30 /usr/lib64
cd /usr/lib64
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.30 libstdc++.so.6
strings /usr/lib64/libstdc++.so.6 | grep GLIBC

编译OpenSSL时报错,Can’t locate IPC/Cmd.pm in @INC

yum -y install perl-IPC-Cmd
yum install -y pcre-develyum install -y pcre-devel
yum install openssl-devel

继续安装cmake

make -j4 && sudo make install
cmake -version

3、安装Python3

tar xvf Python-3.8.13.tgz
mkdir /usr/local/python3
yum -y install zlib-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
cd Python-3.8.13;
./configure --prefix=/usr/local/python3
make && make install
cd /usr/bin;
mv python python-2.x;
ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3;
ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3;
python3 --version

执行Python可能报错

cd /usr/libexec/
vim urlgrabber-ext-down
修改python为python2.7

4、安装llvm

这个去官网上下载 附下载地址: git clone https://github.com/llvm/llvm-project.git
cd llvm-project
mkdir build
cd build
cmake -DLLVM_ENABLE_PROJECTS=“clang;lldb” -DCMAKE_BUILD_TYPE=“Debug” -DCMAKE_INSTALL_PREFIX=“/usr/local/llvm” …/llvm
make

export LLVM_HOME=/usr/local/llvm-project/llvm-project-main/build/bin
export PATH= L L V M H O M E : LLVM_HOME: LLVMHOME:PATH

5、unzip解压

yum install -y unzip zip

上面的命令均是离线安装,需要的包如下图,请自行下载对应的包
在这里插入图片描述
二、至此所有的准备命令都安装好,可以使用llvm-symbolizer解析内存地址了
如下图:Android是XX.so文件 ,iOS是XX.dsYM文件
在这里插入图片描述

附:llvm-symbolizer命令使用说明:https://www.llvm.org/docs/CommandGuide/llvm-symbolizer.html

iOS内存地址计算方法:
file_address = runtime_address - load_address + vm_address
举例:0x1009c9940=0x0000000104b39940-0x104170000+ 0x100000000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值