8
8
9
9
from binaryninja import Architecture , BinaryView , Symbol , SymbolType , Type , Structure , StructureType , FunctionGraphType , LowLevelILOperation , MediumLevelILOperation , core_ui_enabled
10
10
11
- from . import DebugAdapter , ProcessView , dbgeng , QueuedAdapter
11
+ from . import DebugAdapter , ProcessView , dbgeng , gdblike , QueuedAdapter
12
12
13
13
if core_ui_enabled ():
14
14
try :
@@ -481,9 +481,7 @@ def ip(self):
481
481
return self .registers ['rip' ]
482
482
elif self .remote_arch .name == 'x86' :
483
483
return self .registers ['eip' ]
484
- elif self .remote_arch .name == 'aarch64' :
485
- return self .registers ['pc' ]
486
- elif self .remote_arch .name in ['arm' , 'armv7' ]:
484
+ elif self .remote_arch .name in ['aarch64' , 'arm' , 'armv7' , 'Z80' ]:
487
485
return self .registers ['pc' ]
488
486
else :
489
487
raise NotImplementedError ('unimplemented architecture %s' % self .remote_arch .name )
@@ -504,9 +502,7 @@ def stack_pointer(self):
504
502
return self .registers ['rsp' ]
505
503
elif self .remote_arch .name == 'x86' :
506
504
return self .registers ['esp' ]
507
- elif self .remote_arch .name == 'aarch64' :
508
- return self .registers ['sp' ]
509
- elif self .remote_arch .name in ['arm' , 'armv7' ]:
505
+ elif self .remote_arch .name in ['aarch64' , 'arm' , 'armv7' , 'Z80' ]:
510
506
return self .registers ['sp' ]
511
507
else :
512
508
raise NotImplementedError ('unimplemented architecture %s' % self .remote_arch .name )
@@ -668,20 +664,35 @@ def attach(self):
668
664
raise Exception ("Tried to attach but already debugging" )
669
665
670
666
self .connecting = True
671
- self .adapter = DebugAdapter .get_new_adapter (self .adapter_type , stdout = self .on_stdout )
672
- if DebugAdapter .ADAPTER_TYPE .use_connect (self .adapter_type ):
667
+
668
+ # can the remote sense create the appropriate adapter?
669
+ if self .adapter_type == DebugAdapter .ADAPTER_TYPE .REMOTE_SENSE :
673
670
try :
674
- self .adapter = QueuedAdapter . QueuedAdapter (self .adapter )
675
- self .adapter . setup ()
676
- self .adapter . connect (self .remote_host , self . remote_port )
677
- self .connecting = False
671
+ self .adapter = gdblike . connect_sense (self .remote_host , self . remote_port )
672
+ if self .adapter :
673
+ self .adapter = QueuedAdapter . QueuedAdapter (self .adapter )
674
+ self .connecting = False
678
675
except Exception as e :
679
676
self .connecting = False
680
677
self .adapter = None
681
678
raise e
682
- else :
683
- self .connecting = False
684
- raise Exception ("cannot connect to adapter of type %s" % self .adapter_type )
679
+
680
+ if self .connecting :
681
+ self .adapter = DebugAdapter .get_new_adapter (self .adapter_type , stdout = self .on_stdout )
682
+
683
+ if DebugAdapter .ADAPTER_TYPE .use_connect (self .adapter_type ):
684
+ try :
685
+ self .adapter = QueuedAdapter .QueuedAdapter (self .adapter )
686
+ self .adapter .setup ()
687
+ self .adapter .connect (self .remote_host , self .remote_port )
688
+ self .connecting = False
689
+ except Exception as e :
690
+ self .connecting = False
691
+ self .adapter = None
692
+ raise e
693
+ else :
694
+ self .connecting = False
695
+ raise Exception ("cannot connect to adapter of type %s" % self .adapter_type )
685
696
686
697
self .memory_view .update_base ()
687
698
0 commit comments