sapero napisał(a)
Jakim prawem EIP jest uzależniony od CS? Przecież mamy płaską pamięć w której rejestry są w stanie zaadresować dowolną komórkę z 32-bitowej szyny adresu, a segmentów używamy tylko z konieczności indeksowania jakiegoś bloku pamięci (np. TEB) którego liniowy adres nikogo nie powinien obchodzić.
Takim prawem, że procesor wykonuje instrukcje via cs:eip, nie 'samo' eip. Poza tym podałem GetThreadSelectorEntry właśnie ze względu na TEB. Nikogo nie powinien adres bazowy FS obchodzić? No ciekawe, bo ja sobie bez tego głębszego grzebania w aplikacjach po prostu nie wyobrażam...
sapero napisał(a)
Sami sprawdźcie co się stanie przy adresowaniu mov eax,[cs:offset] pod kontrolą 32-bitowego windowsa.
Tylko dlatego, że selektory mają ten sam adres bazowy i limit...
sapero napisał(a)
Podobnie ESP w disassemblerach jest błędnie przypisywany do SS, a dane do DS, chociaż opcode wcale nie zawiera informacji o rejestrze segmentu.
Błędnie? Podobno bezpośrednie operacje na stosie domyślnie łapią segment SS zaś 'zwykłe' DS i ew. ES (stringi)...
sapero napisał(a)
Jeżeli ktoś poczuł się obrażony, to niech się pocieszy faktem że nawet fachowcy z firmy Microsoft robią takie błędy: jeżeli segment nie jest znany, to wyświetlimy domyślny segment, pomimo tego że domyślny jest NULL segment.
Nie przesadzaj, wspomniany TEB idzie przez FS, jego adres bazowy trzeba ustalić.
Poza tym segmenty w Windows są ważne, czasem się w abuse przydają ];->