Простое, но недокументированное определение производителя процессора (Intel / AMD)
Метки amd, asm, assembler, cpu, intel, undocumented, vendor, ассемблер, недокументированное
Простое, но недокументированное определение производителя процессора (Intel / AMD) Обычно для определения производителя процессора используется инструкция cpuid (функция eax=0):
'ntel' для Intel, а вот в MASM придётся набирать задом наперёд 'letn' ).Но есть один недокументированный способ, который описан в приложенных файлах к книге Криса Касперски "Техника отладки программ без исходных текстов" (немного в другом виде и коде, нежели у меня, но суть та же). Смысл в том, что несмотря на то, что в мануалах Intel и AMD написано, что инструкция div (и idiv ) возвращает флаг ZF неопределённым, тем не менее, Intel его не меняет, а AMD всегда выставляет в 0 (вне зависимости от результата, тестовые программы можно посмотреть здесь).Посему при необходимости (для обфускации или при сильно ограниченных ресурсах) можно сократить код до следующих строк:
|
Всего комментариев 5
Комментарии
-
Запись от Usaga размещена 15.10.2018 в 08:06 -
Цитата:вряд ли такой подход имеет практическую ценность
Цитата:Да и какие такие ресурсы данный подход экономит?
– при обфускации кода (вариант сcpuid
гораздо более очевиден),
– при запуске на очень старых процессорах, у которых нетcpuid
(386 и младше, некоторые 486), хотя это стоит всё же предварительно проверить (если у кого-то есть возможность, сделайте, плиз ),
– в коде, где на счету каждый байт (к примеру, в демосцене),
– вряд ли проверка процессора будет использоваться в критических к скорости циклах, но просто как факт:div
работает гораздо быстрее, чемcpuid
и не выполняет сериализацию.
Собственно, эту статью я написал ради того, чтобы поделиться забавным фактом.
А нужно это вам или нет (и для чего) – решайте самиЗапись от Jin X размещена 15.10.2018 в 09:04
Обновил(-а) Jin X 15.10.2018 в 10:02 -
Запись от Jin X размещена 21.02.2022 в 21:34
Обновил(-а) Jin X 21.02.2022 в 21:47 -
Хм, разве после выполнения командыфлаг нулевого результата ZF будет сброшен, а не установлен?
Assembler 1
xor edx,edx
Запись от sharpey размещена 23.02.2022 в 04:29 -
Запись от Jin X размещена 20.09.2023 в 13:17
Обновил(-а) Jin X 20.09.2023 в 13:20