📄 x86_64cpuid.pl
字号:
#!/usr/bin/env perl$output=shift;$win64a=1 if ($output =~ /win64a\.[s|asm]/);open STDOUT,">$output" || die "can't open $output: $!";print<<___ if(defined($win64a));_TEXT SEGMENTPUBLIC OPENSSL_rdtscALIGN 16OPENSSL_rdtsc PROC rdtsc shl rdx,32 or rax,rdx retOPENSSL_rdtsc ENDPPUBLIC OPENSSL_atomic_addALIGN 16OPENSSL_atomic_add PROC mov eax,DWORD PTR[rcx]\$Lspin: lea r8,DWORD PTR[rdx+rax]lock cmpxchg DWORD PTR[rcx],r8d jne \$Lspin mov eax,r8d cdqe retOPENSSL_atomic_add ENDPPUBLIC OPENSSL_wipe_cpuALIGN 16OPENSSL_wipe_cpu PROC pxor xmm0,xmm0 pxor xmm1,xmm1 pxor xmm2,xmm2 pxor xmm3,xmm3 pxor xmm4,xmm4 pxor xmm5,xmm5 xor rcx,rcx xor rdx,rdx xor r8,r8 xor r9,r9 xor r10,r10 xor r11,r11 lea rax,QWORD PTR[rsp+8] retOPENSSL_wipe_cpu ENDPOPENSSL_ia32_cpuid PROC mov r8,rbx mov eax,1 cpuid shl rcx,32 mov eax,edx mov rbx,r8 or rax,rcx retOPENSSL_ia32_cpuid ENDP_TEXT ENDSCRT\$XIU SEGMENTEXTRN OPENSSL_cpuid_setup:PROCDQ OPENSSL_cpuid_setupCRT\$XIU ENDSEND___print<<___ if(!defined($win64a));.text.globl OPENSSL_rdtsc.align 16OPENSSL_rdtsc: rdtsc shlq \$32,%rdx orq %rdx,%rax ret.size OPENSSL_rdtsc,.-OPENSSL_rdtsc.globl OPENSSL_atomic_add.type OPENSSL_atomic_add,\@function.align 16OPENSSL_atomic_add: movl (%rdi),%eax.Lspin: leaq (%rsi,%rax),%r8lock; cmpxchgl %r8d,(%rdi) jne .Lspin movl %r8d,%eax .byte 0x48,0x98 ret.size OPENSSL_atomic_add,.-OPENSSL_atomic_add.globl OPENSSL_wipe_cpu.type OPENSSL_wipe_cpu,\@function.align 16OPENSSL_wipe_cpu: pxor %xmm0,%xmm0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 pxor %xmm3,%xmm3 pxor %xmm4,%xmm4 pxor %xmm5,%xmm5 pxor %xmm6,%xmm6 pxor %xmm7,%xmm7 pxor %xmm8,%xmm8 pxor %xmm9,%xmm9 pxor %xmm10,%xmm10 pxor %xmm11,%xmm11 pxor %xmm12,%xmm12 pxor %xmm13,%xmm13 pxor %xmm14,%xmm14 pxor %xmm15,%xmm15 xorq %rcx,%rcx xorq %rdx,%rdx xorq %rsi,%rsi xorq %rdi,%rdi xorq %r8,%r8 xorq %r9,%r9 xorq %r10,%r10 xorq %r11,%r11 leaq 8(%rsp),%rax ret.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu.globl OPENSSL_ia32_cpuid.align 16OPENSSL_ia32_cpuid: movq %rbx,%r8 movl \$1,%eax cpuid shlq \$32,%rcx movl %edx,%eax movq %r8,%rbx orq %rcx,%rax ret.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid.section .init call OPENSSL_cpuid_setup___
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -