c언어의 dumpcode.h 기능을 python에서 사용하기 위해 만들었다.
코드가 좀 지저분하다;;
import sys, struct, string def hexdump(data, align_size=1, baseaddr=0x00000000): ''' data = Dump data align_size = 1, 2, 4 (byte, word, dword) baseaddr = Base Address ''' if not (align_size in (1, 2, 4)): return False if len(data)%align_size != 0 : return False ascii_data = '' for i in range(0, len(data), align_size): ### print address ### if i%16 == 0: sys.stdout.write(' ' + ascii_data) ### print ascii data ### ascii_data = '' sys.stdout.write('\n0x%s ' % struct.pack('>I', baseaddr).encode('hex')) baseaddr += 0x10 ### print hex data ### tmp = data[i:i+align_size] hex_data = '' for j in range(1, align_size+1): hex_data += tmp[-j] if tmp[-j] in string.digits+string.ascii_letters+string.punctuation: ascii_data += tmp[-j] else: ascii_data += '.' ascii_data += ' ' hex_data = hex_data.encode('hex') if align_size != 1: sys.stdout.write('0x%s ' % hex_data) else: ascii_data = ascii_data.replace(' ', '') sys.stdout.write('%s ' % hex_data) ### print last ascii data ### if i == range(0, len(data), align_size)[-1]: length = 16-len(ascii_data.replace(' ', '')) if align_size == 4: space = (' '*11)*(length/4) elif align_size == 2: space = (' '*7)*(length/2) else: space = (' '*3)*length sys.stdout.write(space + ' ' + ascii_data) ascii_data = '' sys.stdout.write('\n') ### test ### if __name__ == '__main__': data = 'aabbccddaabbccdd'*2 hexdump(data, 4, 0x10000000) hexdump(data, 2, 0xbf000000) hexdump(data, 1)
[ 결과 ]
'Programming > Python' 카테고리의 다른 글
python - 인코딩 관련 (0) | 2014.03.02 |
---|---|
python - Thread 사용 (1) | 2014.03.01 |
python - ROL, ROR (2) | 2013.12.14 |
RC4 알고리즘 - python (1) | 2013.12.14 |
python HTML, XML 파싱 - BeautifulSoup (0) | 2013.11.21 |