Jestem debugowania php. Kiedy patrzę na miejsce w pamięci, w którym znam wskaźnik na adres, widzę wskaźnik - na przykład 22810408 (0x08048122) - to jest przy użyciu wersji php w CLI.Dlaczego apache przechowuje przesunięcia w pamięci, gdzie php-cli przechowuje adresy pamięci wirtualnej?
JEDNAK, kiedy używam apache2 i próbuję zrobić to samo, nie widzę wskaźnika do prawdziwego adresu. Zamiast tego widzę odsunięcie od nagłówka ELF, który po dodaniu do adresu nagłówka ELF daje mi "prawdziwy" adres. Na przykład, jeśli "prawdziwy" adres był 0x08048122, a nagłówek ELF był na 0x08048000, wtedy zobaczyłbym 22010000 (0x122) w tej samej pozycji.
Problem pojawia się, gdy próbuję znaleźć "prawdziwy" adres czegoś, co znajduje się na stosie. "Prawdziwy" adres ma być 0xbfccxxxx, ale kiedy dodaję numer znajdujący się w nagłówku ELF, rzeczy po prostu się nie sumują! Dostaję wszystkie złe adresy.
Próbowałem już googlować przez długi czas, ale nie jestem pewien, jak to poprawnie sformułować lub czego szukać.
Tak więc, czego zasadniczo szukam, to więcej informacji o tym, dlaczego Apache ma przesunięcie zamiast prawdziwego adresu pamięci i jak to wszystko odnosi się do adresów na stosie. Czy ktokolwiek mógłby mi podać jakieś wskazówki do materiału, który mógłby wyjaśnić?
Czy możesz przyglądać się przesunięciom w pliku wykonywalnym, który nie jest jeszcze wczytywany, a nie na adresach w uruchomionym procesie? – ugoren
To pewnie tak działa. Czy masz więcej informacji o tym, jak to działa? – optional
Twój "wskaźnik" dał mi lepsze wyniki wyszukiwania. Wygląda na to, że do Apache'a php jest .so, a nie prawdziwym plikiem wykonywalnym. Widzę więc przesunięcia, a nie rzeczywiste adresy, a to jest przyczyną. Czego jeszcze nie rozumiem, to jak przejść z mojego "przesunięcia" do prawdziwego adresu pamięci wirtualnej. Wciąż czytam, ale wszelkie wyjaśnienia lub obowiązkowe lektury byłyby mile widziane. Przynajmniej teraz rozumiem, że nie mogę po prostu dodać mojego adresu ELF, aby uzyskać właściwy - wydaje się, że muszę przeanalizować tabelę przeniesienia .. – optional