Sto cercando di ottenere l'indirizzo (in hex) della funzione exit()
fornito in libc, ma non sono sicuro di dove e come trovarlo.
Qualcuno conosce il modo di trovarlo per favore condividi qualche idea. Grazie!in libc?
in libc?
risposta
Se è necessario l'indirizzo della funzione exit
già presente nel vostro processo, vedere le risposte di Grijesh e altri. Ma se avete bisogno di risolvere la libc exit
funzione di per nome, ad esempio a causa di libc exit
è stato ombreggiato da un'altra libreria, è possibile ottenere con dlsym
:
#define _GNU_SOURCE /* for RTLD_NEXT */
#include <dlfcn.h>
/* ... */
void (*exit_addr)(int) = dlsym(RTLD_NEXT, "exit");
Per dlsym
a risolvere, è necessario collegare con -ldl
.
Grazie per apprezzare la mia risposta e grazie per la tua buona risposta tecnica :) –
Questo è stato davvero utile. Per aggiungere un po 'di informazioni che mi hanno bloccato per alcuni minuti, il comando per collegare con ldl sarebbe ad esempio 'gcc -o getptr getptr.c -ldl'. Il -ldl viene dopo la roba di gcc. – Rstevoa
penso che questo funzionerà:
printf("%p", (void*)exit);
IEEE Std 1003.1, 2004 Edition:
"%p"
L'argomento deve essere un puntatore avoid
. Il valore del puntatore viene convertito in una sequenza di caratteri stampabili, in un modo definito dall'implementazione.
+1, risposta elegante – slezica
printf("%p", exit);
Si dovrà includere stdio.h per printf e stdlib.h per l'uscita. Questo crea un puntatore a funzione per uscire e stamparlo.
L'indirizzo di qualsiasi funzione è solo il suo nome (senza parentesi). Avrai anche bisogno di #include <stdlib.h>
. Per impostare un puntatore initalised:
void (*p)(int) = exit;
È possibile utilizzare gdb come segue:
gdb ./yourprogram
break main
run
print exit
$1 = {<text variable, no debug info>} 0xb7e4b7f0 <exit>
here is exit() address----------------^
- 1. Compilare senza libc
- 2. caratteri multibyte in libc regcomp e regexec
- 3. Ritorno in libc - Istruzione non valida
- 4. Esiste un sistema operativo LibC?
- 5. Link OSX Homebrew Gfortran contro libC++
- 6. Link app iOS contro libstdC++ e libC++
- 7. Come compilare/collegare Boost con clang ++/libC++?
- 8. clang ++ -stdlib = libC++ porta a undefined reference
- 9. libC++ differenza tra vettore :: insert sovraccarica
- 10. Come collegarsi a un diverso file libc?
- 11. Offset diverso in backtrace_symbols() di libc e unw_get_proc_name() di libunwind()
- 12. vector :: clear in libC++ per tipi distruttibili banalmente
- 13. Nessun riferimento ciondolante per std :: min in libc
- 14. Questo crash in libC++ std :: search_n è un bug?
- 15. std :: async in clang 3.0 + libC++ non funziona?
- 16. Differenza tra - buffer overflow e return in libc attack
- 17. Come utilizzare la versione di debug di libc
- 18. Quando __builtin_memcpy viene sostituito con memcpy di libc
- 19. Collegamento di libC++ al progetto CMake su Linux
- 20. Cattura messaggi di errore libc, reindirizzamento da/dev/tty
- 21. Modo corretto per creare clang e libC++ insieme (bootstrap)
- 22. clang 3.1 con libC++ su ubuntu 12.04, iostream non trovato
- 23. espressione non è una costante intergrale clang libC++ threading
- 24. Rimuovi la dipendenza da libstdC++ Boost con clang ++/libC++?
- 25. Compilare con libc meno recenti (versione `GLIBC_2.14 'non trovata)
- 26. discrepanza di istream eof tra libC++ e libstdC++
- 27. era una libreria creata con libC++ o libstdC++ su Mac
- 28. non può essere eseguito eseguibile collegato con libc
- 29. Come costruire la open source libc di apple?
- 30. Quando si esegue clang compilato da source, come specificare la posizione di libC++, oppure qualcuno mi spiega cosa -stdlib = libC++ fa
Tutte le risposte sono buone, ma si dovrebbe capire che 'exit (3)' è una funzione di libreria standard invocando il '_exit (2)' syscall che è non proprio una funzione ma una chiamata di sistema (potresti invocarla con il codice assemblatore senza alcuna normale chiamata di funzione, anche se la funzione '_exit' di libc sta eseguendo il syscall come una funzione richiamabile da C) ... Il vero lavoro del sistema le chiamate sono fatte all'interno del kernel. –