📄 rmd-586.pl
字号:
#!/usr/local/bin/perl# Normal is the# ripemd160_block_asm_data_order(RIPEMD160_CTX *c, ULONG *X,int blocks);$normal=0;push(@INC,"perlasm","../../perlasm");require "x86asm.pl";&asm_init($ARGV[0],$0);$A="ecx";$B="esi";$C="edi";$D="ebx";$E="ebp";$tmp1="eax";$tmp2="edx";$KL1=0x5A827999;$KL2=0x6ED9EBA1;$KL3=0x8F1BBCDC;$KL4=0xA953FD4E;$KR0=0x50A28BE6;$KR1=0x5C4DD124; $KR2=0x6D703EF3;$KR3=0x7A6D76E9;@wl=( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15, 7, 4,13, 1,10, 6,15, 3,12, 0, 9, 5, 2,14,11, 8, 3,10,14, 4, 9,15, 8, 1, 2, 7, 0, 6,13,11, 5,12, 1, 9,11,10, 0, 8,12, 4,13, 3, 7,15,14, 5, 6, 2, 4, 0, 5, 9, 7,12, 2,10,14, 1, 3, 8,11, 6,15,13, );@wr=( 5,14, 7, 0, 9, 2,11, 4,13, 6,15, 8, 1,10, 3,12, 6,11, 3, 7, 0,13, 5,10,14,15, 8,12, 4, 9, 1, 2, 15, 5, 1, 3, 7,14, 6, 9,11, 8,12, 2,10, 0, 4,13, 8, 6, 4, 1, 3,11,15, 0, 5,12, 2,13, 9, 7,10,14, 12,15,10, 4, 1, 5, 8, 7, 6, 2,13,14, 0, 3, 9,11, );@sl=( 11,14,15,12, 5, 8, 7, 9,11,13,14,15, 6, 7, 9, 8, 7, 6, 8,13,11, 9, 7,15, 7,12,15, 9,11, 7,13,12, 11,13, 6, 7,14, 9,13,15,14, 8,13, 6, 5,12, 7, 5, 11,12,14,15,14,15, 9, 8, 9,14, 5, 6, 8, 6, 5,12, 9,15, 5,11, 6, 8,13,12, 5,12,13,14,11, 8, 5, 6, );@sr=( 8, 9, 9,11,13,15,15, 5, 7, 7, 8,11,14,14,12, 6, 9,13,15, 7,12, 8, 9,11, 7, 7,12, 7, 6,15,13,11, 9, 7,15,11, 8, 6, 6,14,12,13, 5,14,13,13, 7, 5, 15, 5, 8,11,14,14, 6,14, 6, 9,12, 9,12, 5,15, 8, 8, 5,12, 9,12, 5,14, 6, 8,13, 6, 5,15,13,11,11, );&ripemd160_block("ripemd160_block_asm_data_order");&asm_finish();sub Xv { local($n)=@_; return(&swtmp($n)); # tmp on stack }sub Np { local($p)=@_; local(%n)=($A,$E,$B,$A,$C,$B,$D,$C,$E,$D); return($n{$p}); }sub RIP1 { local($a,$b,$c,$d,$e,$pos,$s,$o,$pos2)=@_; &comment($p++); if ($p & 1) { #&mov($tmp1, $c) if $o == -1; &xor($tmp1, $d) if $o == -1; &mov($tmp2, &Xv($pos)); &xor($tmp1, $b); &add($a, $tmp2); &rotl($c, 10); &add($a, $tmp1); &mov($tmp1, &Np($c)); # NEXT # XXX &rotl($a, $s); &add($a, $e); } else { &xor($tmp1, $d); &mov($tmp2, &Xv($pos)); &xor($tmp1, $b); &add($a, $tmp1); &mov($tmp1, &Np($c)) if $o <= 0; &mov($tmp1, -1) if $o == 1; # XXX if $o == 2; &rotl($c, 10); &add($a, $tmp2); &xor($tmp1, &Np($d)) if $o <= 0; &mov($tmp2, &Xv($pos2)) if $o == 1; &mov($tmp2, &wparam(0)) if $o == 2; &rotl($a, $s); &add($a, $e); } }sub RIP2 { local($a,$b,$c,$d,$e,$pos,$pos2,$s,$K,$o)=@_;# XXXXXX &comment($p++); if ($p & 1) {# &mov($tmp2, &Xv($pos)) if $o < -1;# &mov($tmp1, -1) if $o < -1; &add($a, $tmp2); &mov($tmp2, $c); &sub($tmp1, $b); &and($tmp2, $b); &and($tmp1, $d); &or($tmp2, $tmp1); &mov($tmp1, &Xv($pos2)) if $o <= 0; # XXXXXXXXXXXXXX # XXX &rotl($c, 10); &lea($a, &DWP($K,$a,$tmp2,1)); &mov($tmp2, -1) if $o <= 0; # XXX &rotl($a, $s); &add($a, $e); } else { # XXX &add($a, $tmp1); &mov($tmp1, $c); &sub($tmp2, $b); &and($tmp1, $b); &and($tmp2, $d); if ($o != 2) { &or($tmp1, $tmp2); &mov($tmp2, &Xv($pos2)) if $o <= 0; &mov($tmp2, -1) if $o == 1; &rotl($c, 10); &lea($a, &DWP($K,$a,$tmp1,1)); &mov($tmp1, -1) if $o <= 0; &sub($tmp2, &Np($c)) if $o == 1; } else { &or($tmp2, $tmp1); &mov($tmp1, &Np($c)); &rotl($c, 10); &lea($a, &DWP($K,$a,$tmp2,1)); &xor($tmp1, &Np($d)); } &rotl($a, $s); &add($a, $e); } }sub RIP3 { local($a,$b,$c,$d,$e,$pos,$s,$K,$o,$pos2)=@_; &comment($p++); if ($p & 1) {# &mov($tmp2, -1) if $o < -1;# &sub($tmp2, $c) if $o < -1; &mov($tmp1, &Xv($pos)); &or($tmp2, $b); &add($a, $tmp1); &xor($tmp2, $d); &mov($tmp1, -1) if $o <= 0; # NEXT # XXX &rotl($c, 10); &lea($a, &DWP($K,$a,$tmp2,1)); &sub($tmp1, &Np($c)) if $o <= 0; # NEXT # XXX &rotl($a, $s); &add($a, $e); } else { &mov($tmp2, &Xv($pos)); &or($tmp1, $b); &add($a, $tmp2); &xor($tmp1, $d); &mov($tmp2, -1) if $o <= 0; # NEXT &mov($tmp2, -1) if $o == 1; &mov($tmp2, &Xv($pos2)) if $o == 2; &rotl($c, 10); &lea($a, &DWP($K,$a,$tmp1,1)); &sub($tmp2, &Np($c)) if $o <= 0; # NEXT &mov($tmp1, &Np($d)) if $o == 1; &mov($tmp1, -1) if $o == 2; &rotl($a, $s); &add($a, $e); } }sub RIP4 { local($a,$b,$c,$d,$e,$pos,$s,$K,$o)=@_; &comment($p++); if ($p & 1) {# &mov($tmp2, -1) if $o == -2;# &mov($tmp1, $d) if $o == -2; &sub($tmp2, $d); &and($tmp1, $b); &and($tmp2, $c); &or($tmp2, $tmp1); &mov($tmp1, &Xv($pos)); &rotl($c, 10); &lea($a, &DWP($K,$a,$tmp2)); &mov($tmp2, -1) unless $o > 0; # NEXT # XXX &add($a, $tmp1); &mov($tmp1, &Np($d)) unless $o > 0; # NEXT # XXX &rotl($a, $s); &add($a, $e); } else { &sub($tmp2, $d); &and($tmp1, $b); &and($tmp2, $c); &or($tmp2, $tmp1); &mov($tmp1, &Xv($pos)); &rotl($c, 10); &lea($a, &DWP($K,$a,$tmp2)); &mov($tmp2, -1) if $o == 0; # NEXT &mov($tmp2, -1) if $o == 1; &mov($tmp2, -1) if $o == 2; # XXX &add($a, $tmp1); &mov($tmp1, &Np($d)) if $o == 0; # NEXT &sub($tmp2, &Np($d)) if $o == 1; &sub($tmp2, &Np($c)) if $o == 2; # XXX &rotl($a, $s); &add($a, $e); } }sub RIP5 { local($a,$b,$c,$d,$e,$pos,$s,$K,$o)=@_; &comment($p++); if ($p & 1) { &mov($tmp2, -1) if $o == -2; &sub($tmp2, $d) if $o == -2; &mov($tmp1, &Xv($pos)); &or($tmp2, $c); &add($a, $tmp1); &xor($tmp2, $b); &mov($tmp1, -1) if $o <= 0; # XXX &rotl($c, 10); &lea($a, &DWP($K,$a,$tmp2,1)); &sub($tmp1, &Np($d)) if $o <= 0; # XXX &rotl($a, $s); &add($a, $e); } else { &mov($tmp2, &Xv($pos)); &or($tmp1, $c); &add($a, $tmp2); &xor($tmp1, $b); &mov($tmp2, -1) if $o <= 0; &mov($tmp2, &wparam(0)) if $o == 1; # Middle code &mov($tmp2, -1) if $o == 2; &rotl($c, 10); &lea($a, &DWP($K,$a,$tmp1,1)); &sub($tmp2, &Np($d)) if $o <= 0; &mov(&swtmp(16), $A) if $o == 1; &mov($tmp1, &Np($d)) if $o == 2; &rotl($a, $s); &add($a, $e); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -