Created
December 30, 2023 16:33
-
-
Save arteze/8c16e7f86c733558d221e287a724cbd5 to your computer and use it in GitHub Desktop.
Script de bash que busca un símbolo recursivamente con readelf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| function buscar_palabra_recursiva { | |
| local ruta=$1 | |
| local palabra=$2 | |
| local pila=$3 | |
| # Verifica si la ruta existe | |
| if [ ! -f "$ruta" ]; then | |
| echo "La ruta '$ruta' no existe." | |
| return | |
| fi | |
| # Muestra la información de la biblioteca | |
| # echo "Biblioteca: $ruta" | |
| # Realiza la búsqueda de la palabra en el resultado de strings | |
| if strings "$ruta" | grep -q -i "$palabra"; then | |
| # Si encuentra la palabra, imprime la pila en verde fuerte | |
| echo -e "\e[1;32m$(echo "$pila" | tr " " "\n")\n$ruta\e[0m" | |
| fi | |
| # Obtén la lista de bibliotecas NEEDED sin corchetes | |
| bibliotecas=$(readelf -d "$ruta" | grep NEEDED | sed 's/.*\[//;s/\]//') | |
| # Itera sobre la lista de bibliotecas | |
| for lib in $bibliotecas; do | |
| # Encuentra la ruta en el sistema | |
| ruta_lib=$(ldconfig -p | grep -w "$lib" | awk '{print $4}') | |
| if [ -n "$ruta_lib" ]; then | |
| # Llamada recursiva para la biblioteca necesaria | |
| buscar_palabra_recursiva "$ruta_lib" "$palabra" "$pila $ruta" | |
| else | |
| echo "No se encontró la ruta para $lib" | |
| fi | |
| done | |
| } | |
| # Verifica que se proporcionen dos argumentos | |
| if [ $# -ne 2 ]; then | |
| echo "Usage: $0 <ruta_libreria> <palabra>" | |
| exit 1 | |
| fi | |
| echo "Buscando símbolo" | |
| buscar_palabra_recursiva "$1" "$2" "" | |
| echo "Fin" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment