[asm] asm, disasembler i wtf

0

Mam pytanie bo już trochę zgłupiałem:

Instrukcja typu

mov edi edi

to odpowiednik

x = x;

i nie robi absolutnie nic, prawda?

Tzn. robi - zajmuje czas i pracę procesora.

W takim razie po co w funkcjach z user32.dll - tylko tam patrzyłem (za pomocą IDA) ale podejrzewam że tego jest więcej - po co na początku każdej funkcji występuje takie coś?

Jedyne zastosowanie takiego czegoś jakie mi przychodzi do głowy to zatrzymanie na chwilę procesora żeby dać czas innym urządzeniom, ale w tym przypadku mi się to wydaje zupełnie bezsensowne.

Tyle się mówi o optymalizacji przez kompilatory, a one, nawet jeśli im takie coś wyjdzie, nie umieją czegoś takiego usunąć?

Chyba że to ja czegoś nie rozumiem?

0

Ta instrukcja zajmuje 2 bajty, dokładnie tyle samo co krótki skok. Przypadek? Niet, to na potrzeby mechanizmu hotpatching. W skrócie - jak system ma zaaplikować patcha bez przeładowywania biblioteki to musi mieć jakiś margines - 2 bajty na prologu funkcji i trochę wolnego przy wyrównaniu funkcji, to w zupełności wystarcza żeby zrobić pewne proxy do nowej wersji funkcji. Zwyczajnie jest miejsce żeby bez ruszania właściwego kodu nowy skok wstawić.

0

Dzięki Deus/Świętowit, jak zwykle można na ciebie liczyć...
[soczek]


Z ciekawości - siedzisz cały dzień na forum z palcem na F5 czy masz jakiegoś alerta do wątków z "asm" w nazwie? Bo na moje pytania dot. asemblera odpowiadasz w max 15 minut...

0

Ostro męczę się z przegryzaniem przez dosyć obszerną dokumentację - jak potrzebuję coś dodatkowego wyszukać to przy okazji zaglądam co nowego na forum.

1 użytkowników online, w tym zalogowanych: 0, gości: 1