2

У меня есть набор двоичных файлов, созданных для набора инструкций SSE4 (Streaming SIMD Extensions 4) . Я хотел бы запустить их на процессоре, который не поддерживает набор инструкций. Естественно, что я получаю ошибку недопустимой инструкции по оборудованию, когда пытаюсь запустить этот двоичный файл. Но некоторые двоичные файлы все еще работают, потому что они на самом деле не используют SSE4 .

Я ищу быстрый способ определить, действительно ли двоичный файл использует набор инструкций SSE4 . Поэтому я могу сканировать кучу файлов и получить список тех, которые требуют перестройки.

1 ответ1

3

Этот файл имеет довольно хороший список инструкций по сборке и соответствующий им набор инструкций для использования с vim:

https://raw.githubusercontent.com/Shirk/vim-gas/master/syntax/gas.vim

Если у вас есть objdump в вашей системе, просто выгрузить двоичный файл как сборку, с

objdump -d FILEPATH

Таким образом, комбинируя эти две вещи, вы можете перечислить, какие семейства используются двоичным файлом. Я создал скрипт Python, который я использовал для автоматизации этого в прошлом.

http://pastebin.com/raw/AaRZdQLc

Примеры выходов:(Это один имеет инструкции SSE4) $ ./binary_families.py /bin/busybox These instruction families were used: 186_Base, 386_Base, 8086_Base, ARM_THUMB, Base, KATMAI_Base, KATMAI_MMX, KATMAI_SSE, NEHALEM_Base, P6_Base, PENT_3DNOW, PENT_Base, PENT_MMX, PRESCOTT_SSE3, SANDYBRIDGE_AVX, SSE2, SSE41, SSE42, X64_Base, X64_MMX, X64_SSE, X64_SSE2 These instructions could not be categorized: bndmov, cltd, cltq, cmova, cmovae, cmovb, cmovbe, cmove, cmovg, cmovge, cmovl, cmovle, cmovne, cmovns, cmovs, cqto, cvtsi2sdl, cwtl, decl, divl, divq, flds, fldt, fstpt, idivl, ja, jae, jb, jbe, je, jg, jge, jl, jle, jne, jnp, jns, jp, js, leaveq, lock, movabs, movsbl, movsbq, movsbw, movslq, movswl, movswq, movzbl, movzwl, mull, negl, nopl, nopw, notb, notq, rep, repnz, repz, seta, setae, setb, setbe, sete, setg, setge, setl, setle, setne, setnp, setns, setp, tzcnt, vinserti128, vmovdqu64

(Это не так) $ ./binary_families.py /bin/ls
These instruction families were used: 186_Base, 386_Base, 8086_Base, ARM_THUMB, KATMAI_SSE, P6_Base, PENT_MMX, SSE2, X64_Base, X64_MMX, X64_SSE, X64_SSE2 These instructions could not be categorized: cltq, cmova, cmovae, cmovb, cmovbe, cmove, cmovg, cmovge, cmovle, cmovne, cmovns, cmovs, fadds, fildll, fistpll, flds, fldt, fstpt, ja, jae, jb, jbe, je, jg, jge, jl, jle, jne, jns, jo, js, movabs, movsbl, movslq, movzbl, movzwl, nopl, nopw, rep, repnz, repz, seta, setb, sete, setg, setge, setl, setle, setne, setp

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .