Domanda

Vorrei acquisire l'indirizzo della pagina vsyscall per i miei usi. Ho solo due idee qui: alterare il compilatore di memorizzare queste informazioni in qualche luogo noto dopo che è stato dato a __start, o leggere / proc / [PID] / mappe. Io davvero non voglio leggere / proc / come che è lento e non dovrebbe essere necessario. Anche io non voglio fare modifiche del compilatore. Qualcuno ha un'alternativa? C'è un simbolo che dovrei sapere?

La sua nel punto Sono tentato di roba questa funzionalità in una chiamata ioctl in un modulo che ho sviluppato come parte di questo lavoro!

È stato utile?

Soluzione

Ecco una pugnalata al buio:

Se è possibile determinare a quale indirizzo ha iniziato il processo di pila, allora si può forse trovare i parametri che sono stati forniti al __start. Si potrebbe quindi accedere ai parametri tramite puntatori del tipo appropriato impostato per gli offset corrispondenti dalla stack pointer iniziale.

Secondo l'articolo Come main () viene eseguito su Linux, da Hyouck "Hawk "Kim , le prime istruzioni del __start scriverà gli argomenti iniziali in modo deterministico prima di chiamare __libc_start_main.

Ovviamente qualsiasi approccio di questo tipo è soggetta ad instabilità e specifico della piattaforma se l'implementazione di __start sono stati modificati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top