Размеры, форма и количество дыръ въ Intel'овскихъ
процессорахъ давно уже стали притчей во языцахъ. Какъ
только появляется новый Intel'овский процессоръ - мы уже въ
превкушенiи новыхъ дыръ. Порой поражаетъ оригинальность
решения, къ которому прибегаютъ Intel'овские умельцы при
проектированiи очередной дыры. е успела утихнуть шумиха по
поводу бесконечного ожидания 80386 процессора, какъ въ
80486 из-подъ самого носа Intel'овскихъ ротозеевъ куда-то
уплыла плавающая запятая въ тригонометрическихъ операцияхъ
80486 процессора.
Просто удивительно, какъ мастерски Intel'овские проходимцы
прячутъ дыры отъ непосвященного глаза. Какъ правило, дыры
скрываются подъ надписью "reserved by Intel", означающую
" е влезай - убьетъ !", но, бываетъ, когда надъ дырой
постарется какой-нибудь левша изъ Intel'а, то дыра
превращается в кладезь идей.
И когда какой-нибудь хакеръ, сойдя съ пути истинного, съ
трескомъ проваливается въ это дырявое произведение искусства,
я невольно представляю себе этихъ очкариковъ из Intel'а,
противно посмеивающихся и потирающихъ потные руки, радуясь
неповоротливости и тупости оступившегося.
А потомъ, когда эта дыра становится достояниемъ
гластности *) Intel'овские умники принимаются штопать эту
дыру белыми нитками.
о хватитъ про давно известные и канувшие въ лету или
въ NUL дыры. Посмотримъ, что тамъ еще осталось для насъ ...
Ба, да ведь 8086 дырявъ какъ решето ... Да ужъ, видно,
архитекторъ этого чуда Stephen P. Morse постарался наславу.
Можно сказать, душу вложилъ. Даже nop умудрился сделать отнюдь
не nop'омъ.
Или, скажемъ, душевная команда lea. Хотя многие даже не
подозреваютъ, для чего она придумана, темъ не менее, лепятъ
охинею типа lea si,[0120]. Это вредный стиль программирования,
онъ до добра не доведетъ, куда полезней такая вотъ команда -
lea cx,dx.
о особо богатъ Intel jump'ами. Какихъ только jump'овъ тамъ
нетъ - и близкий есть и далекий, и условный тебе, пожалуйста,
а для совсемъ гурмановъ припасенъ даже очень короткий, но
самыми интересными являются, несомненно, косвенные, особливо
jmp far ax или даже jmp far al. Ажно оторопь беретъ, глядя,
въ какую глыбокую дыру проваливается процессоръ.
А намедни заглянул еще въ одну прореху, что кодомъ 0F
зовется. Жалко, конечно, что Intel его не документировала.
Хотя, побробуй, документируй, - вспотеешь.
А вотъ давеча удовлетворялъ трассировочные потребности на
8086. Странный, я Вамъ скажу, трэйсъ въ этомъ девайсе.
Кстати, Вы не пробовали отличить 8088 от 8086, только не
советую смотреть, какъ это делаетъ Петя Norton въ SystemInfo,
- как-то надуммано у него это получается.
у, а 80286 во многихъ 8086 дырахъ просто фолтуетъ
( оригинальное решение, не правда ли, вместо того просто
документировать дыру, хотя, конечно, въ большинстве случаевъ
проще фолтонуть, поскольку описать, что делаетъ дыра куда
сложней ).
Или, скажемъ, loadall въ 80286. Load'итъ абсолютно all
регистры 80286. Эта команда еще ждетъ своего часа, за ней
будущее, я верю въ это.
80386 наследовалъ у 80286 дурную привычку фолтовать где
попало. о при этом онъ ни разу не понимаетъ loadall 80286'го.
У него есть свой loadall, хотя и более гибкий, но въ
кастрированном варианте, потому как онъ load'итъ отнюдь не
all регистры.
Кроме того, въ этомъ процессоре есть такая дыра, куда
стекаетъ весь зарядъ съ единичных битовъ въ регистре ax или
eax после выполнения popa или popad соответственно.
Igor Sysoevъ (5020/26.3)
Red Rat's Club.
|