Como detectar compatibilidade binária com o conjunto de instruções SSE4?

1

Eu tenho um monte de binários criados para o SSE4 (extensões SIMD Streaming 4) conjunto de instruções. Eu gostaria de executá-los em um processador que não tem suporte para o conjunto de instruções. É natural que eu receba o erro de instrução de hardware ilegal quando tentei executar esses binários. Mas alguns binários ainda funcionam porque eles realmente não usam SSE4 .

Estou procurando um método rápido para determinar se um binário realmente usa o conjunto de instruções SSE4 . Então, eu pude verificar vários arquivos e obter uma lista daqueles que precisam ser reconstruídos.

    
por ayvango 03.03.2015 / 21:15

1 resposta

2

Este arquivo tem uma boa lista de instruções de montagem e seu conjunto de instruções correspondente para uso com o vim:

link

Se você tem objdump em seu sistema, é simples descarregar um binário como assembly, com

objdump -d FILEPATH

Portanto, combinando essas duas coisas, você pode listar quais famílias são usadas por um binário. Eu criei um script python que eu usei para automatizar isso no passado.

link

Exemplos de saídas: (Este tem instruções 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

(isso não acontece) $ ./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

    
por 31.12.2016 / 05:43

Tags