Ассемблер - экстремальная оптимизация


Рисунок6 дизассемблер IDA Pro – мощное средство выявления ошибок в программах


Неудивительно, что попытка интерпретации таблицы импорта как исполняемого кода приводит к краху и чтобы программа заработала правильно, необходимо использовать косвенную адресацию, заключив имя функции в квадратные скобки и выставив перед ними знак префикса cs:

или ds: (без разницы, но ds работает чуточку быстрее). Без префиксов компилятор просто не поймет что мы от него хотим (любой ассемблер — понял бы). А между прочим, префикс — это не только лишний байт, но и большая головная боль для процессорного конвейера, приводящая к тормозам, впрочем, практически незаметным на фоне тормозов самих API-функций, особенно тем из них, что обращаются к ядру операционной системы (переход в режим ядра — это тысячи процессорных тактов!).

Правильный код выглядит так:

 

__asm{

       call ds:[GetVersion]              ; косвенный

вызов API-функции

}




Начало  Назад  Вперед



Книжный магазин