拷贝gdb相关二进制文件、lib库依赖以及python库文件
方法一:直接找个带有gdb工具的arm架构机器,拷贝相关文件
- 查询gdb位置
xxxx@xxx-virtual-machine:~$ whereis gdb
gdb: /usr/bin/gdb /usr/include/gdb /usr/share/gdb
- 拷贝gdb相关二进制文件
jiayi@jiayi-virtual-machine:~$ cp /usr/bin/gdb
gdb gdb-add-index gdbtui gdbus
jiayi@jiayi-virtual-machine:~$ cp /usr/bin/gdb* /tmp/my-gdb/bin/
- 拷贝gdb库依赖
ldd 可以查看gdb所需的库依赖,重点需要关注libpython以及libc的版本,我这里libpython3.10即表明所需python版本为3.10,目标机器上需要拥有python3.10.
直接./libc.so.6运行查看libc版本,并查看目标机器上的libc版本是否满足要求。libc文件不要轻易更改,不小心失误会导致基本命令都无法使用。
jiayi@jiayi-virtual-machine:~$ ldd /usr/bin/gdb
linux-vdso.so.1 (0x00007ffef1b9f000)
libreadline.so.8 => /lib/x86_64-linux-gnu/libreadline.so.8 (0x00007f4f6099d000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f4f60981000)
libncursesw.so.6 => /lib/x86_64-linux-gnu/libncursesw.so.6 (0x00007f4f60945000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f4f60913000)
libpython3.10.so.1.0 => /lib/x86_64-linux-gnu/libpython3.10.so.1.0 (0x00007f4f60200000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f6082c000)
...
确认目标机器满足该gdb要求后,运行脚本拷贝库依赖。
#:cat copy-lib.sh
deplist=$( ldd $1 | awk '{if (match($3,"/")){ print $3}}' )
cp -L -n $deplist $2
//将gdb依赖拷贝至/tmp/my-gdb/lib目录下
#:./copy-lib.sh /usr/bin/gdb /tmp/my-gdb/lib/
- 拷贝gdb的python库文件
xxx@xxx-virtual-machine:~$ cp -r /usr/share/gdb/ /tmp/my-gdb/share
- 将/tmp/my-gdb拷贝至目标机器后,将目录中的bin、lib、share放至目标机器的对应位置。
查看/etc/profile文件,二进制文件放PATH目录下。
lib目录可以自己随便放个地方,然后在LD_LIBRARY_PATH下将该路径放置最后。
#: export LD_LIBRARY_PATH=:/lib/aarch64-linux-gnu:/usr/lib64:$LD_LIBRARY_PATH
share文件下gdb目录放/usr/share下。
6. 运行gdb
gdb ./test
方法二:
在编译服务器上源码安装gdb
- 源码下载
- 解压
- .configure --host=arm-linux --prefix=***/output
- make
- make install
然后将output下各个目录拷贝到目标机器即可。