# -- coding: cp1251 --
#! /usr/bin/python3
import socket
switch = { '$qSupported' :'PacketSize=131072;swbreak+;hwbreak+' ,
'$Hg0' :'OK' ,
'$Hg-1' :'OK' ,
'$qTStatus' :'' ,
'$qfThreadInfo' :'m0' ,
'$qsThreadInfo' :'l' ,
'$Hc-1' :'OK' ,
'$qC' :'' ,
'$qAttached' :'1' ,
'$qOffsets' :'Text=00;Data=00;Bss=0' ,
'$p20' :'0000010000000000' ,
'$qSymbol' :'OK' ,
'$vKill' :'OK' ,
'+$?' :'S00' ,
'$qTfV' :'' ,
'$qTsP' :'' ,
'Hc0' :'OK' ,
'c' :'' ,
'$#' :'' ,
'$D' :'OK' ,
'$!' :'OK'
}
def ReadMemory( data) :
#some code
return value
def ReadRegisters( data) :
#some code
return value
def WriteRegisters( data) :
#some code
return "Ok"
def WriteRegisterN( data) :
#some code
return "OK"
def WriteMemory( data) :
#some code
return "OK"
def LastSignal( data) :
return "S05"
def Step( ) :
#some code
return 'S00'
def Continue( ) :
#some code
return 'S05'
def SetMemory( data) :
#some code
return "OK"
def InsertBreakpoint( data) :
#some code
return "OK"
def DeleteBreakpoint( data) :
#some code
return "OK"
def VQuery( data) :
if ( data.find ( '$vCont;c' ) != -1 ) :
return 'T0501:7ffff850;40:3000ce98'
if ( data.find ( '$vCont?' ) != -1 ) :
return ""
if ( data.find ( '$vCtrlC' ) != -1 ) :
printf( "Client interrupt the process" )
if ( data.find ( '$vKill' ) != -1 ) :
printf( "Client kill the process" )
if ( data.find ( '$vStopped' ) != -1 ) :
printf( "Client stopped the process" )
if ( data.find ( '$vMustReplyEmpty' ) != -1 ) :
return ''
return "OK"
def Message( data) :
print ( 'Data: ' , data)
if ( data.find ( '$m' ) != -1 ) :
return ReadMemory( data)
elif ( data.find ( '$g' ) != -1 ) :
return ReadRegisters( data)
elif ( data.find ( '$G' ) != -1 ) :
return WriteRegisters( data)
elif ( data.find ( '$P' ) != -1 ) :
return WriteRegisterN( data)
elif ( data.find ( '$M' ) != -1 ) :
return WriteMemory( data)
elif ( data.find ( '$?' ) != -1 ) :
return LastSignal( data)
elif ( data.find ( '$s' ) != -1 ) :
return Step( )
elif ( data.find ( '$c' ) != -1 ) :
return Continue( )
elif ( data.find ( '$X' ) != -1 ) :
return SetMemory( data)
elif ( data.find ( '$Z' ) != -1 ) :
return InsertBreakpoint( data)
elif ( data.find ( '$z' ) != -1 ) :
return DeleteBreakpoint( data)
elif ( data.find ( '$v' ) != -1 ) :
return VQuery( data)
else :
for key in switch:
if ( data.find ( key) != -1 ) :
return switch[ key]
return 'OK'
###########################################################
#*********************************************************#
###########################################################
class GDBClientHandler( object ) :
def __init__ ( self , clientsocket) :
#some code
def run( self ) :
msg= Message( data)
GDBClientHandler( conn) .run ( )
IyAtLSBjb2Rpbmc6IGNwMTI1MSAtLQojISAvdXNyL2Jpbi9weXRob24zCmltcG9ydCBzb2NrZXQKCnN3aXRjaCA9IHsgJyRxU3VwcG9ydGVkJzonUGFja2V0U2l6ZT0xMzEwNzI7c3dicmVhays7aHdicmVhaysnLAogICAgICAgICAgICckSGcwJzonT0snLAogICAgICAgICAgICckSGctMSc6J09LJywKICAgICAgICAgICAnJHFUU3RhdHVzJzonJywKICAgICAgICAgICAnJHFmVGhyZWFkSW5mbyc6J20wJywKICAgICAgICAgICAnJHFzVGhyZWFkSW5mbyc6J2wnLAogICAgICAgICAgICckSGMtMSc6J09LJywKICAgICAgICAgICAnJHFDJzonJywKICAgICAgICAgICAnJHFBdHRhY2hlZCc6JzEnLAogICAgICAgICAgICckcU9mZnNldHMnOidUZXh0PTAwO0RhdGE9MDA7QnNzPTAnLCAKICAgICAgICAgICAnJHAyMCc6JzAwMDAwMTAwMDAwMDAwMDAnLAogICAgICAgICAgICckcVN5bWJvbCc6J09LJywKICAgICAgICAgICAnJHZLaWxsJzonT0snLAogICAgICAgICAgICcrJD8nOidTMDAnLAogICAgICAgICAgICckcVRmVic6JycsCiAgICAgICAgICAgJyRxVHNQJzonJywKICAgICAgICAgICAnSGMwJzonT0snLAogICAgICAgICAgICdjJzonJywKICAgICAgICAgICAnJCMnOicnLAogICAgICAgICAgICckRCc6J09LJywKICAgICAgICAgICAnJCEnOidPSycKICAgICAgICAgICB9CgpkZWYgUmVhZE1lbW9yeShkYXRhKToKICAgICNzb21lIGNvZGUKICAgIHJldHVybiB2YWx1ZSAKCmRlZiBSZWFkUmVnaXN0ZXJzKGRhdGEpOgogICAgI3NvbWUgY29kZQogICAgcmV0dXJuIHZhbHVlCgpkZWYgV3JpdGVSZWdpc3RlcnMoZGF0YSk6CiAgICAjc29tZSBjb2RlCiAgICByZXR1cm4gIk9rIgoKZGVmIFdyaXRlUmVnaXN0ZXJOKGRhdGEpOgogICAgI3NvbWUgY29kZQogICAgcmV0dXJuICJPSyIKCmRlZiBXcml0ZU1lbW9yeShkYXRhKToKICAgICNzb21lIGNvZGUKICAgIHJldHVybiAiT0siCgpkZWYgTGFzdFNpZ25hbChkYXRhKToKICAgIHJldHVybiAiUzA1IgoKZGVmIFN0ZXAoKToKICAgICNzb21lIGNvZGUKICAgIHJldHVybiAnUzAwJwoKZGVmIENvbnRpbnVlKCk6CiAgICAjc29tZSBjb2RlCiAgICByZXR1cm4gJ1MwNScKCmRlZiBTZXRNZW1vcnkoZGF0YSk6CiAgICAjc29tZSBjb2RlCiAgICByZXR1cm4gIk9LIgoKZGVmIEluc2VydEJyZWFrcG9pbnQoZGF0YSk6CiAgICAjc29tZSBjb2RlCiAgICByZXR1cm4gIk9LIgoKZGVmIERlbGV0ZUJyZWFrcG9pbnQoZGF0YSk6CiAgICAjc29tZSBjb2RlCiAgICByZXR1cm4gIk9LIgoKZGVmIFZRdWVyeShkYXRhKToKICAgIGlmIChkYXRhLmZpbmQoJyR2Q29udDtjJykgIT0gLTEpOgogICAgICAgIHJldHVybiAnVDA1MDE6N2ZmZmY4NTA7NDA6MzAwMGNlOTgnICAgIAogICAgaWYgKGRhdGEuZmluZCgnJHZDb250PycpICE9IC0xKToKICAgICAgICByZXR1cm4gIiIKICAgIGlmIChkYXRhLmZpbmQoJyR2Q3RybEMnKSAhPSAtMSk6CiAgICAgICAgcHJpbnRmKCJDbGllbnQgaW50ZXJydXB0IHRoZSBwcm9jZXNzIikKICAgIGlmIChkYXRhLmZpbmQoJyR2S2lsbCcpICE9IC0xKToKICAgICAgICBwcmludGYoIkNsaWVudCBraWxsIHRoZSBwcm9jZXNzIikKICAgIGlmIChkYXRhLmZpbmQoJyR2U3RvcHBlZCcpICE9IC0xKToKICAgICAgICBwcmludGYoIkNsaWVudCBzdG9wcGVkIHRoZSBwcm9jZXNzIikKICAgIGlmIChkYXRhLmZpbmQoJyR2TXVzdFJlcGx5RW1wdHknKSAhPSAtMSk6CiAgICAgICAgcmV0dXJuICcnCiAgICByZXR1cm4gIk9LIgoKZGVmIE1lc3NhZ2UoZGF0YSk6CiAgICBwcmludCgnRGF0YTogJywgZGF0YSkKICAgIGlmIChkYXRhLmZpbmQoJyRtJykgIT0gLTEpOgogICAgICAgIHJldHVybiBSZWFkTWVtb3J5KGRhdGEpCiAgICBlbGlmIChkYXRhLmZpbmQoJyRnJykgIT0gLTEpOgogICAgICAgIHJldHVybiBSZWFkUmVnaXN0ZXJzKGRhdGEpCiAgICBlbGlmIChkYXRhLmZpbmQoJyRHJykgIT0gLTEpOgogICAgICAgIHJldHVybiBXcml0ZVJlZ2lzdGVycyhkYXRhKQogICAgZWxpZiAoZGF0YS5maW5kKCckUCcpICE9IC0xKToKICAgICAgICByZXR1cm4gV3JpdGVSZWdpc3Rlck4oZGF0YSkKICAgIGVsaWYgKGRhdGEuZmluZCgnJE0nKSAhPSAtMSk6CiAgICAgICAgcmV0dXJuIFdyaXRlTWVtb3J5KGRhdGEpCiAgICBlbGlmIChkYXRhLmZpbmQoJyQ/JykgIT0gLTEpOgogICAgICAgIHJldHVybiBMYXN0U2lnbmFsKGRhdGEpCiAgICBlbGlmIChkYXRhLmZpbmQoJyRzJykgIT0gLTEpOgogICAgICAgIHJldHVybiBTdGVwKCkgCiAgICBlbGlmIChkYXRhLmZpbmQoJyRjJykgIT0gLTEpOgogICAgICAgIHJldHVybiBDb250aW51ZSgpCiAgICBlbGlmIChkYXRhLmZpbmQoJyRYJykgIT0gLTEpOgogICAgICAgIHJldHVybiBTZXRNZW1vcnkoZGF0YSkKICAgIGVsaWYgKGRhdGEuZmluZCgnJFonKSAhPSAtMSk6CiAgICAgICAgcmV0dXJuIEluc2VydEJyZWFrcG9pbnQoZGF0YSkKICAgIGVsaWYgKGRhdGEuZmluZCgnJHonKSAhPSAtMSk6CiAgICAgICAgcmV0dXJuIERlbGV0ZUJyZWFrcG9pbnQoZGF0YSkKICAgIGVsaWYgKGRhdGEuZmluZCgnJHYnKSAhPSAtMSk6CiAgICAgICAgcmV0dXJuIFZRdWVyeShkYXRhKQogICAgZWxzZToKICAgICAgICBmb3Iga2V5IGluIHN3aXRjaDoKICAgICAgICAgICAgaWYgKGRhdGEuZmluZChrZXkpICE9IC0xKToKICAgICAgICAgICAgICAgIHJldHVybiBzd2l0Y2hba2V5XQogICAgcmV0dXJuICdPSycKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmNsYXNzIEdEQkNsaWVudEhhbmRsZXIob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGllbnRzb2NrZXQpOgogICAgICAgICNzb21lIGNvZGUKICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgbXNnPU1lc3NhZ2UoZGF0YSkKCkdEQkNsaWVudEhhbmRsZXIoY29ubikucnVuKCk=
compilation info
Traceback (most recent call last):
File "/usr/lib/python3.5/py_compile.py", line 125, in compile
_optimize=optimize)
File "<frozen importlib._bootstrap_external>", line 735, in source_to_code
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "./prog.py", line 124
def run(self):
^
IndentationError: expected an indented block
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.5/py_compile.py", line 129, in compile
raise py_exc
py_compile.PyCompileError: Sorry: IndentationError: expected an indented block (prog.py, line 124)
stdout