From 472ebcbfaccd62adc0c4ab1c59a967c1d7034385 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 7 Sep 2015 11:52:14 +0100 Subject: fish --- reverse_engineering/bits.pl | 150 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100755 reverse_engineering/bits.pl (limited to 'reverse_engineering/bits.pl') diff --git a/reverse_engineering/bits.pl b/reverse_engineering/bits.pl new file mode 100755 index 0000000..c6b3c7f --- /dev/null +++ b/reverse_engineering/bits.pl @@ -0,0 +1,150 @@ +#!/usr/bin/env perl +use strict; + +use IO::Socket::INET; +use Data::Dumper; +#use IO::Socket::Timeout; +# +# + +my $prompt= '> '; + +sub my_readline_worker($) +{ +my $sock=shift; +my $ret=""; +my $d=""; + +while (1) { +return $ret if $sock->read($d,1)!=1; + +next if $d eq "\n"; + +$ret.=$d; + +return $ret if $d eq "\r"; +return $ret if $ret =~ /> $/; + +} + + +} + +sub my_readline($) +{ +my $sock=shift; +my $ret=my_readline_worker($sock); +#print $ret."\n"; +return $ret; +} + + + + +sub wait_for_prompt($) +{ +my $ocd=shift; + +1 while (my_readline($ocd) ne $prompt); +} + + +sub open_ocd($) { +my $addr=shift; +my $sock = IO::Socket::INET->new( $addr); +wait_for_prompt($sock); +return $sock; +} + + +sub write_reg($$$) +{ +my ($ocd,$r,$v)=@_; + +$ocd->printf("mww 0x%08x 0x%08x\n",$r,$v); +wait_for_prompt($ocd); +} + +sub read_reg($$) +{ +my ($ocd,$r)=@_; +my $ret; + +$ocd->printf("mdw 0x%08x\n",$r); + +$ret=my_readline($ocd); +$ret=my_readline($ocd); + +wait_for_prompt($ocd); + + +$ret =~ s/[\r\n\s]//g; + + +if ($ret =~ /0x[0-9A-Fa-f]+:([0-9a-fA-F]+)/) { + return hex($1); +} + +return undef; +} + + +sub dir_get($) { +my $ocd=shift; +return read_reg($ocd,0x50000514); +} + + +sub dir_set($$) { +my ($ocd,$v)=@_; +write_reg($ocd,0x50000518,$v); +} + + +sub dir_clr($$) { +my ($ocd,$v)=@_; +write_reg($ocd,0x5000051c,$v); +} + +sub io_set($$) { +my ($ocd,$v)=@_; +write_reg($ocd,0x50000508,$v); +} + +sub io_clr($$) { +my ($ocd,$v)=@_; +write_reg($ocd,0x5000050c,$v); +} + +sub io_get($) { +my $ocd=shift; +return read_reg($ocd,0x50000510); +} + +my $ocd=open_ocd('127.0.0.1:4444' ); + + +my $ov=-1; +while (1) { +my $v=dir_get($ocd); + +next if $v == $ov; + +$ov=$v; + + +printf "%04b %04b %04b %04b %04b %04b %04b %04b\n", + ($v >>28) &0xf, + ($v >>24) &0xf, + + ($v >>20) &0xf, + ($v >>16) &0xf, + + ($v >>12) &0xf, + ($v >>8) &0xf, + + ($v >>4) &0xf, + ($v) &0xf; + +} + -- cgit v1.2.3