파이썬 자료형과 c언어 구조체형 사이에서 데이터 변환을 할 때 사용하는 것이다.
이 친구들은 당연히 import struct 를 해줘야 사용이 가능하지.
C 프로그램이 파일에 저장한 바이너리 정보들을 가져와서 파이썬으로 읽어낼 때, 혹은
파이썬으로 C프로그램이 원하는 형식으로 자료를 파일에 저장할 때 쓴다.
struct 모듈의 pack과 unpack, calsize 등을 사용할 수 있는데~ 한번 알아봅시다.
- pack( format, v1, v2, v3, ....)
- unpack( format, string )
- calcsize( format )
struct 모듈의 기능을 사용하기 위해 파이썬에서 지정해둔 포맷 스트링있다. C언어의 %d 같은 것들.
아마 알아두는게 좋을 듯 싶다. 내가 이걸 왜 할 필욜 느꼈냐면 C 프로그램에 리모트 익스플로잇을 하려고
파이썬 스크립트를 쓸라는데 페이로드 전달을 해야 하는데, pack 으로 형식 변환을 하지 않으면
이상한게 들어가더라.. ㅃㅋ 그럼 파이썬에서 사용하는 포맷 스트링을 알아보자.
이 표를 보고 한번 변환을 해볼까.
pack('hhl', 1,2,3) 머 이런식으로 하면
1,2,3 각각 h,h,l 형으로 변환하는 것이다.
2hl 이렇게 해도 된다.
문자열은 요런 식으로.
unpack을 이제 봅시다.
변수에 pack해서 저장한걸 unpack으로 풀어해치는 느낌이랄까.
그다음에 calcsize를 알아보자.
이건 포맷 스트링의 크기를 반환해주는 녀석이다.
어? 근데 hi 하니까 6이나와야 하는데 8이 나왔다. 이게 바이트 저장 순서의 문제 때문에 이렇게 나온다.
일단 정렬 제어 문자들이 있는데 먼저 보자.
바이트 순서에서 시스템에 따른다는 말은 말그대로 시스템에서 적용하는 방식을 따른다는 말이고..
나머진 딱히 설명 할 필요 없을 듯하다. 아래는 포맷의 크기를 표에 정리해둔것임.
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
리눅스 파일 입출력 관련 시스템콜 함수 (0) | 2021.04.14 |
---|---|
파이썬 파일 핸들링 (파일 입출력) (0) | 2021.04.13 |
파이썬 람다(Lambda) 함수 (0) | 2021.04.13 |
파이썬에서 객체 복사 (copy, deepcopy) (0) | 2021.04.13 |
파이썬 문자열 활용 (0) | 2021.04.13 |