Серийный номер процессора
основываясь на теге «лицензирование», который вы использовали для своего вопроса, Вы можете получить лучшие результаты чтение сетевого MAC-адреса. Идентификация ПК по MAC-адресу не является полностью нерушимым методом защиты от копирования, но иногда он используется.
У меня есть окончательный ответ на это без каких-либо внешних библиотек. Просто введите это:
wmic bios получить serialnumber
Это даст вам серийный номер на шасси ПК 😉 (найдено в базе знаний microsoft)
помните, что большинство компьютеров в эти дни корабль с CPU ID отключен в BIOS. См.CPUID в Википедии
даже при включенном CPUID есть ли серийный номер, доступный в современных процессорах? Я помню, что был большой протест в Pentium 3 дней, когда вся эта проблема серийного номера была поднята.
это и старая нить. Но у меня была такая же проблема, но я получил следующую логику, работающую без слишком много «если», » и » или «но».
проблема с серийным номером CPU заключается в том, что он не всегда работает в виртуализированной среде.
Я сделал следующую логику с набором серверов на базе Windows:
Win32_BIOS может предоставить вам серийный номер bios. Нам нужно иметь в виду, что если система виртуализирована, вы можете получить тот же BIOS serial номер для всех серверов.
Win32_NetworkAdapter может предоставить вам MAC, который вы также можете использовать. В случаях, когда у вас есть несколько NICs, вы получите несколько Mac.
объединяя оба этих идентификатора, у меня был уникальный набор из 6000 серверов, охватывающих физические и виртуальные. Это было очень просто реализовать с помощью ManagementClass & ManagementObject .
но только предостережение: когда вы пытаетесь получить MO экземпляр удаленно, это займет больше, чем несколько секунд в оптической сети с задержкой WMI данные по многопоточному вызову.
__get_cpuid (unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx);
- заголовок: #include <cpuid.h>
Примечание: серийный номер процессора был введен на Intel Pentium III, но из-за соображений конфиденциальности эта функция больше не реализована на более поздних моделях.
нет последовательного идентификатора процессора (PSN; CPUID edx бит 18″ psn » серийный номер процессора) после Pentium III в процессорах Intel; и никогда не было никакого psn в чипах AMD:
Однако имейте в виду, что только процессоры Pentium III Xeon, Mobile Pentium III и Pentium III поддерживают функцию серийного номера процессора, введенную процессором Pentium III. Никакой другой процессор Intel не поддерживает функцию серийного номера процессора
EAX=3: серийный номер процессора См. также: Pentium III § споры по вопросам конфиденциальности
Это возвращает серийный номер процессора. Процессор серийный номер был введен на Intel Pentium III, но из-за соображений конфиденциальности эта функция больше не реализована на более поздних моделях (бит функции PSN всегда очищается). Процессоры Transmeta Efficeon и Crusoe также обеспечивают эту функцию. Процессоры AMD, однако, не реализуют эту функцию ни в одной модели процессора.
Статья CPUID – идентификация процессора
. На различных площадках народ сильно преувеличивает утверждая, будто число опкодов давно перевалило за тысячу. Чтобы-уж наверняка и ради собственного интереса, я скопировал из оглавления указанной доки в блокнот весь перечень, и к своему удивлению на выходе получил всего 632 строки текста, в каждой из которых одна инструкция. Судя по-всему, на данный момент именно такой объём полностью удовлетворяет нашим требованиям, иначе монархи из Intel не упустили-бы возможности записать на свой счёт очередной новый опкод. Из всего этого листа, в данной статье предлагаю рассмотреть одну из интересных инструкций под названием CPUID, которая призвана идентифицировать бортовой процессор CPU.
1. Основная идея
При включении машины, системный BIOS/EFI должен каким-либо образом опознать установленный на материнской плате CPU, чтобы настроить под него чипсет и всё остальное. Нужно сказать, что на первом витке эволюции вплоть до древних 16-битных процессоров i80286 в этом не было необходимости, поскольку архитектура компьютера была примитивной, с довольно устойчивым состоянием. Но тут пришёл 32-битный процессор нового поколения i80386, который мог работать как в 16, так и в 32-битном защищённом режиме. Здесь-то и всплыла проблема. Инженеры Intel с присущим им оптимизмом решили её просто – они жёстко запрограммировали проц, чтобы на старте он возвращал свою "половую" принадлежность в регистровой паре EСX:EDX. Но дальше-больше..
Инструкцию CPUID принёс с собой следующий процессор i80486, когда благодаря механизму PAE (Physical Address Extension, расширение физического адреса) 32-битному CPU стало доступно сразу три ступени памяти, разрядностью 16, 32 и 36-бит. Теперь, биосу требовался паспорт процессора, иначе он просто не мог должным образом настроить ответственные за распределение ОЗУ регистры чипсета. Так возникла необходимость в идентификации CPU, что вынудило Intel включить в набор команд инструкцию CPUID. Первая его спецификация от Intel датируется 1993-годом.
Если говорить об инструкциях в целом, то каждая из них является совокупностью микрокоманд. Когда инструкция простая (типа INC, ADD, SUB и т.д.), для неё достаточно одной микрокоманды, а если сложная – она собирается из нескольких таких команд. На этапе изготовления процессора, производитель зашивает в специально предназначенную для этих целей встроенную ROM-память весь поддерживаемый набор микрокоманд, из которых в конечном счёте и собираются разнообразные инструкции. Блок процессора под названием "микро-секвенсер" (microsequencer) считывает микрокоманды из хранилища ROM, и по-требованию передаёт их в декодер инструкций. Таким образом, чтобы включить в набор команд процессора какую-нибудь новую инструкцию, в большинстве случаях производителю достаточно добавить лишь пару ключевых микрокоманд.
На этапе производства процессора отследить все его ошибки невозможно, что влечёт за собой различные хард-глюки. По этой причине, производитель предусматривает обновление микро-кодов уже при эксплуатации готового продукта. Обновы всегда кратны 2Кб и их можно найти на сайтах Intel и AMD. Включённый в пакет прошивальщик сначала идентифицирует бортовой CPU, и если его модель/степпинг/ревизия совпадает с прошивкой, то заливает обновлённые микро-коды не в ROM процессора, а в системный BIOS, от куда проц потом их и стягивает. Intel давно уже практикует рассылку своих обновлений всем производителям биосов, чтобы они включали их в свой код. В конечном итоге, поддержка биосами современных процессоров определяется в первую очередь наличием соответствующей прошивки.
На уровне-же микроархитектуры CPUID устроена так, что помимо прочего, в постоянную память ROM производитель закладывает порядка 30-ти основных листов с детальной информацией о своём продукте, и некоторое кол-во (под)листов. В документации эти листы назвали "Leaf" , а подлисты "Subleaf" . Перед тем-как вызвать инструкцию CPUID, мы должны предварительно указать номер конкретного листа в регистре EAX, и если этот лист имеет вложенный (под)лист, то его номер занести ещё и в регистр ECX. На программном уровне, запрос каждого из листов представляет собой отдельную функцию, о чём прямым текстом и сообщается в спецификации CPUID.
В таблице ниже я перечислил все доступные мне функции и их назначения. К сожалению, в наличии оказалась только спека от 2012-года, и более свежих данных мне так и не удалось выудить из сети (если кто поделится, буду благодарен). Причём действительна представленная табличка только для процессоров Intel, поскольку у AMD нумерация функций совсем иная. Как по мне, так двум этим гигантам пора-бы уже не выносить нам мозг, а "выпить за мировую", чтобы согласовывать между собой хотя-бы такие элементарные вещи. Ан-нет.. нужно чтобы всё было через известное место. В силу того, что на обеих моих машинах (бук и стационар) установлены процессоры Intel, всё нижесказанное будет относиться исключительно к продуктам Intel.
2. Стандартные функции
Начнём по-порядку и рассмотрим на конкретных примерах, какого рода информацию возвращают все функции CPUID. В некоторых случаях, это поможет осуществить направленные на конкретный процессор атаки, ну или просто идентифицировать его, чтобы пустить код по нужной ветке. К примеру если мы написали приложение с использованием современных инструкций SSE4 или AVX, то это приложение может попасть на платформу, процессор которой вообще не поддерживает данный тип инструкций. Значит перед запуском софта нужно обязательно позвать CPUID и проверить в нём нужные биты. В любом случае знания всегда идут на шаг впереди их отсутствия, а потому профит по-любому будет.
2.0. Функция EAX=0. (Vendor-ID, and Largest Standard Function)
Данная функция возвращает в EAX общее число поддерживаемых процессором стандартных функций, и в остальные три регистра сбрасывает строку с именем производителя. Для Intel и AMD эта строка будет иметь вид "GenuineIntel" и "AuthenticAMD" соответственно. На процессоре своего стационара я получил всего 14 указанных в таблице выше функций, при этом 0x08 и 0x0C находятся в резерве. А вот на буке с 64-битным процессором счётчик показывает уже 25 поддерживаемых функций, но как говорилось выше спеки на него нет. Пример вызова функции выглядит так:
2.1. Функция EAX =1. (Feature Information)
Очередная функция возвращает характерные особенности бортового процессора, где можно будет найти его: Family/Model/Stepping , идентификатор текущего контролёра прерываний APIC, макс.кол-во поддерживаемых ядер (не путать с реальным кол-вом), размер линейки кэш-памяти, и в 64-битах регистровой пары ECX:EDX разнообразные свойства, типа поддержка инструкций SSE4/AVX, гипер-трейдинг HT, x2APIC, RDRAND и многое другое (см.спецификацию). Чтобы вывести все эти 64 типа информации на консоль, придётся чекать их биты по отдельности например инструкцией BT (bit-test), как в примере ниже. Если тестируемый бит взведён, инструкция взводит флаг процессора(CF):
Как видно из листа "FeatureFlags" , мой бородатый проц не знаком с инструкциями SSE4/AVX, а лишь поддерживает макс.SSSE3. Имеет встроенный датчик температуры "TermalMonitor2" (TM2), в режиме энергосбережения может сохранять в специальной область памяти значения всех регистров CPU/FPU (xsave/fxsave соответственно), при переходе в ядро вместо устаревшего SYSCALL использует SYSENTER , способен очищать линейки кэша L1 при помощи инструкции CLFLUSH , и прочее. Описание всех этих аббревиатур имеется в спецификации, так-что курите её.
2.2. Функция EAX =2. (Cache Descriptors)
CPUID.EAX=2 возвращает дескрипторы кэша и TLB. На выходе, младшие 8-бит регистра EAX (AL) содержат значение, которое определяет, сколько раз нужно потянуть за CPUID.EAX=2 , чтобы получить полный образ подсистемы кэш процессора. В большинстве случаях процессоры возвращают в AL значение(1), значит достаточно только одного вызова инструкции CPUID.
Каждый дескриптор кэша имеет размер 1-байт, и является закодированным значением определённой строки. На всякий-пожарный, я оформил все эти строки в виде таблички, и сохранил их в инклуд (см.скрепку в подвале статьи). Поскольку результат мы получим в четырёх 4-байтных регистрах EAX,EBX,ECX,EDX, итого получается 4х4=16 байт. Тогда общее кол-во дескрипторов будет 15, без учёта регистра-счётчика(AL). Если дескриптор имеет значение нуль, значит он пустой и не используется.
Теперь, для разбора дескрипторов последовательно перемещаемся от самого старшего байта всех регистров вниз, к младшему их байту (ну или наоборот). Код реализации парсинга дескрипторов и фрагмент таблицы из спецификации представлены ниже:
Проясним немного ситуацию с устройством кэша TLB процессора..
Не секрет, что процессоры заранее кэшируют нужную информацию, как-только им предоставляется малейшая возможность обращения к оперативной памяти ОЗУ. При этом контролёр памяти старается оттяпать из неё как-можно больше данных, для чего предусмотрен пакетный режим чтения. Значение "Burst-Length" (длина пакета) выставляется чипсетом на макс. =8, в результате чего контролёр повторяет операцию чтения по 8-байтной шине памяти 8-раз. Итого за одно обращение к ОЗУ контролёр читает про запас как-минимум пакетами по 64-байта данных, которые помещает в кэш-линейки "64 byte line size" (см.скрин выше). Кэши L1 бывают двух типов – отдельно для инструкций, отдельно для данных. А вот кэши L2 и L3 уже общие, без разделения на инструкции и данные.
Однако кроме кэша данных, в процессоре имеется ещё и кэш для хранения адресов страниц виртуальной памяти, к которым он обращался последний раз. Этот кэш назвали TLB, или "Translation Lookaside Buffer" (буфер ассоциативной трансляции). Проблема в том, что для доступа к памяти ОЗУ, транслятор контролёра памяти (в процессоре) сначала должен преобразовать текущий адрес из виртуального в физический, на что может уйти до 100-тактов процессора. По современным меркам, это чистой воды расточительство, поэтому один раз преобразовав вирт.адрес, процессор запоминает его в своём кэше TLB. Как показала практика, такой алго даёт существенный прирост скорости при чтении данных из оперативной памяти.
2.3. Функция EAX=3. (Processor Serial Number)
Если процессор фирменный и благополучно прошёл все надзорные инстанции, производитель может записать в него серийный номер продукта. Но в наше время это скорее исключение, чем правило, и лично мне такие пока не встречались.
2.4. Функция EAX=4. (Deterministic Cache Parameters)
Функция CPUID.EAX=4 имеет подлист, поэтому вызывать её нужно с регистром ECX. Как и функция EAX=2, она возвращает информацию о кэшах процессора L1,2,3, только без кэшей TLB. Индекс в регистре ECX указывает, о каком кэше следует возвращать информацию. Чтобы получить информацию о кэшах всех уровней, мы должны вызывать её в цикле, пока в битах EAX[4:0] не получим нуль. Порядок возврата кэшей не регламентируется и может быть изменен по усмотрению Intel. Это означает, что при вызове функции с ECX=0 мы можем получить инфу например о кэше L3 и т.д. Бонусом, индекс(0) в регистре ECX возвращает ещё и кол-во ядер процессора, в старших битах EAX[31:26].
Вызов этой функции, в регистре EBX возвращает информацию об ассоциативности кэшей, кол-ве блоков "Way", и числу записей "Sets". Используя эти данные можно вычислить и размер кэша, который не возвращает функция CPUID.EAX=4 в явном виде. Спецификация предлагает нам такую формулу для этих целей:
Ниже представлен возможный вариант вывода результата этой функции на консоль. Здесь я при первом вызове получаю кол-во ядер, и дальше в цикле зову эту функцию с инкрементом счётчика в ECX, чтобы получить инфу о кэшах всех уровней:
Здесь стоит отметить, что для хранения информации о кэшах, современные процессоры 64-бит используют только данную функцию CPUID.EAX=4 , полностью игнорируя ранее рассмотренную CPUID.EAX=2 , которая возвращает дескрипторы кэшей. В этом случае, при вызове EAX=2 на выходе получаем 0xFF вместо дескрипторов, что означает см.функцию EAX=4. Вот фрагмент из описания функции CPUID.EAX=2 с дескриптором 0xFF :
3. Расширенные функции
Остальные стандартные функции не представляют особого интереса, и при желании вы можете по-экспериментировать с ними сами. А вот рассмотреть набор расширенных функций CPUID вполне себе стоит. Во времена своего младенчества, Intel и AMD разделили инструкцию CPUID пополам. Чтобы хоть как-то отличаться от Intel, инженеры AMD забрали себе старшую половину функций, начиная с 0x80000000. Однако позже всё утряслось и теперь обоим производителям принадлежит весь диапазон, хотя и нумерация по назначению абсолютно разная.
3.0. Функция EAX=8000_0000h (Largest Extended Function)
Эта функция особо не напрягается, и возвращает в единственный регистр EAX общее число поддерживаемых расширенных функций. На обоих своих процессорах я получаю значение EAX=8.
3.1. Функция EAX=8000_0001h (Extended Feature Bits)
Очередная функция возвращает в регистр EDX флаги расширенных возможностей процессора.
Посмотрим на флаг "XD bit" .
В документации AMD этот бит называется NX, от слова "No eXecution" , а Intel обозвала его XD – "eXecution Disable" . Это самый старший бит(64) в записях виртуальных страниц PTE (Page Table Entry), который предотвращает исполнение данных. Для более детального ознакомления с ним отправляю вас к статье "DEP и ASLR – игра без правил" , где ему была посвящена одна глава. Как видно из скрина, мой древний проц поддерживает и его, и архитектуру Intel-64, хотя в упор не видит гигантских виртуальных страниц размером 1Gb (по-умолчанию 4Кб), и не знаком с современной инструкций генератора рандома RDTSCP . Для перехода в ядро при вызовах API-функций инструкция SYSCALL уже давно не юзается даже процессорами Pentium, и ей на смену пришла свежая SYSENTER .
3.2. Функции EAX=8000_0002/3/4 (Processor Brand String)
Цепочка этих трёх функций возвращает имя процессора, как его окрестил производитель. Под строку брэнда производитель резервирует 48 байт во-встроенной памяти ROM, поэтому чтобы получить её полностью, нужно вызвать эти функции последовательно 3-раза. При каждом запросе в регистры EAX,EBX,ECX,EDX будет возвращаться новая информация, поэтому не забываем сохранять её в выделенный буфер. В примере ниже я поместил счётчик цикла в переменную "count", и на каждой итерации увеличиваю номер функции в EAX:
Видимо хреновый контроль ведёт Intel над своими подчинёнными, о чём свидетельствует оформление строки. Зачем вставлять лишние пробелы в середину строки, когда можно дополнить её до 48-байт этими-же пробелами в конце? Здесь явно что-то не чисто..
3.3. Функция EAX=8000_0006h (Extended L2 Cache Features)
Ещё одна функция для сбора информации о кэше, только теперь исключительно об общем L2. Прямым текстом сообщает его размер и длину линейки, и в закодированном виде ассоциативность (мне лень было декодировать). Бьёт без промаха точно в цель на любых процессорах Intel, хоть 32, хоть 64-бит.
3.4. Функция EAX=8000_0008h (Virtual & Physical Address Sizes)
Это последняя функция из списка расширенных и возвращает способность процессора адресовать физическую и виртуальную память ОЗУ. Обратите внимание, что хоть процессор и 64-битный, память он адресует максимум 48-бит. Если вогнать это значение в степень двойки (зовите на помощь калькулятор), то получим макс.поддерживаемую современными процессорами память = 281.474.976.710.656 байт:
4. Пример кода для сбора информации CPUID
В заключении приведу готовый пример кода, который соберёт всю представленную выше информацию.
Опыты выше показали, что CPUID изначально не способен возвратить некоторую информацию. К примеру в нём нет данных типа: кодовое имя ядра, порог рабочих напряжений, тип сокета, потребляемая мощность, и значение производственного тех.процесса. Судя по всему, софт на подобии CPU-Z хранит это всё в своих таблицах, которые программисты скурпулёзно собирают ручками. Базы подобного рода пишутся исходя из значений "Family/Model/Stepping", предоставляемые нам функцией CPUID.EAX=1 . В любом случае, теперь мы знаем, на что способен "зверь" под названием CPUID, и будем делать соответствующие выводы.
В скрепке можно найти инклуд с описанием дескрипторов кэшей, и исполняемый файл для тестов. Всем удачи, пока!
Как узнать серийный номер процессора?
Номер модели и серийный номер процессора указаны на коробке, на поверхности процессора и в руководстве по эксплуатации.
Как проверить подлинность процессора Intel?
Если в системе установлен и работает процессор Intel®, вы можете использовать ipDT (Intel® Processor Diagnostic Tool) для проверки подлинности процессора Intel и совпадения названий продукции. Загрузите приложение Intel® Processor Diagnostic Tool. Проверьте подлинность упаковки Intel. Он должен сообщить Pass.
Что значит номер на процессоре?
После дефиса первая цифра указывает поколение процессоров. . Следующие 3 цифры – порядковый номер модели. В целом, чем выше значение, тем производительнее процессор. Так, i3 имеет значение 7100, I5 – 7200, i7 маркируется как 7500.
Как узнать серийный номер процессора в Windows 10?
В ОС Windows, необходимо нажать клавиши «Win + R», в появившемся окне ввести cmd. В новом окне ввести команду wmic bios get serialnumber и нажать Enter. Ниже будет написана информация о серийном номере.
Как узнать серийный номер процессора через командную строку?
Найти серийный номер с помощью командной строки.
Откройте командную строку : один из способов запуска, работающий в каждой версии Winodws, в строке поиска или в меню выполнить напишите cmd после чего нажмите Enter. 2. В открывшейся командной строке введите команду wmic bios get serialnumber и нажмите Enter.
Как провести тест производительности процессора?
- Вариант 1: AIDA 64 + HWMonitor (узнаем температуру и реальную частоту)
- Вариант 2: CPU-Z (сравнение с другими ЦП)
- Вариант 3: CineBench (еще одно сравнение)
- Вариант 4: просмотр загрузки ЦП в играх
Как узнать с какой скоростью работает процессор?
Щелкните правой кнопкой мыши кнопку Пуск и выберите Диспетчер задач. 2. На экране Диспетчер задач перейдите на вкладку Производительность > щелкните ЦП на левой панели. На правой панели вы сможете увидеть скорость процессора и количество ядер.
Какой программой проверить работоспособность процессора?
Программа Intel® Processor Diagnostic Tool является загружаемым приложением, которое устанавливается на вашем компьютере для: Проверки функциональности всех ядер процессора Intel®.
Как проверить подлинность процессора AMD?
- Убедитесь в том, что ваш розничный продукт AMD запечатан и признаки вскрытия отсутствуют.
- Найдите переливающееся изображение и голограмму на защитной наклейке, чтобы подтвердить подлинность продукта. .
- Просканируйте QR-код на наклейке, чтобы выполнить проверку.
Как узнать когда был сделан процессор?
Достаточно взглянуть на крышку процессора — во второй строке вы найдете маркировку партии, в которой содержится информация о дате и месте производства процессора. Первые две цифры указывают на год производства. Следующие две — неделя производства.
Как понять какое поколение у процессора?
Как узнать поколение процессоров Intel
Первая цифра самой модели, идущая за названием семейства i3, i5, i7, и будет говорить о поколении. Например, у модели i7-8700K первая цифра 8, значит – 8-е поколение. У модели i5-7500 первая цифра 7, значит – 7-е поколение.
Что значит буква F на процессоре?
Процессоры с индексом F в названии появились с выпуском 9-го поколения — Coffee Lake. Компания Intel представила их 8 января 2019-го года. Их отличие от обычных процессоров без индекса F — отсутствие встроенного видеоядра. .
Что значит буква K на процессоре?
В восьмом поколении процессоров встречаются следующие буквы: К — разблокированный множитель, процессор можно разгонять (Core i7-8086K). T — пониженное энергопотребление (Core i5-8500T). U — сверхнизкое энергопотребление в мобильных процессорах (Core i5-8350U).
Что значит F в названии процессора?
Как и предполагалось, буква «F» в названии указывает на отключенное встроенное графическое ядро. Аналитики предполагают, что от этого чипы только выиграют: сквозь эту область кристалла не будут проходить токи, а значит, она сможет абсорбировать излишки тепла от других узлов, улучшая температурный режим внутри.