본문 바로가기
일상,취미

다시 시작해보는 TIL....1일차

by 진득한진드기 2024. 6. 4.

요즘 근황

 

내년 안으로 회사 보안 솔루션 엔진과 플랫폼 개발 파트를 전담하게 될 예정이라고 한다.

 

새 프로젝트가 들어오면서 책임연구원분이 기존에 하시던 파트를 담당하게 되었다는데..... 원래 엔진쪽을 맡게 된다고는 들었지만 부분적이 아닌 아예 전담하게 될 줄은 몰랐어 가지고 진심모드로 교육을 받고있다 ㅋㅋㅋ(그래도 이미 잘 만들어주셔서.... 많이 만질건 없겠죠....?)

 

게다가 오늘 뜬금없이 와이어샤크와 IDA를 다운받았다..... 어느정도 적응되면 패킷 분석과 IDA로 리버싱이나 분석을 할지도 모른다는건가 ㄷ...? (믿어주시는건 고마운데 신입인 저에겐 너무 가혹해요 사장님)

 

미래가 두렵지만 현재 가장 충격먹은건 오직 엔진,코어가 속도만을 위한 것이기에 저수준 언어로 굉장히 복잡하게 되어있는 상태인것.....(코드 보자마자 멘붕)

 

같이 들어온 분은 화면으로 안드로이드 스튜디오가 보이는거 보니 어플 개발자로 오신 것 같다. 조용조용하시고 엄청 착하신 것 같다.

 

TIL 1일차....

 

오늘 교육받은거 중에 파일관련되서 삽질한게 기억에 남는다.

 

엔진에서 특정 파일 내용을 읽을 때 생기는 문제에 대해서 삽질을 좀 많이 했는데

 

우리가 보통 파이썬이나 자바스크립트에서 텍스트 파일을 가져올 때 특정 경로에서 파일을 열거나 읽는 함수를 실행해서 가져오게 된다.

 

예를 들어 Node.js의 경우 path 패키지를 이용해서 path/'파일 명' 와 같이 말이다.

 

이거는 그 언어가 자동으로 파일에 있는 문자들을 긁어서 자동으로 String으로 자연스럽게 가져올 수 있게 되어 있어 평소에는 신경쓰지 못하고 지나칠 수 있다.

 

하지만 굉장히 불편한 저수준 언어에서는 이렇게 친절하지 않다.

 

예를 들어 Write로 파일을 적을 때 Stream을 생성하고 작성하기 위한 Buffer를 만들어 Stream에대한 Buffer에 작성한다.  

 

파일을 읽어오는 Read도 그렇다. 오늘은 이런거 때문에 실수를 했다.

 

현재 내가 사용하는 프로그램에서는 특정 파일을 Read할 때는 해당 파일에 주소값을 기준으로 읽어오기 때문에 해당 파일의 주소값을 필요로 한다 그리고 그 주소값을 기준으로 내가 원하는 만큼의 길이를 읽어올 수 있다.

 

내가 급하게 그린 못생긴 그림으로 보자.

 

예를들어, "abcdefgA"라는 글자가 있다고 하면 원래 Start의 주소에서 버퍼의 길이만큼 읽어와야한다.

 

근데 나는 file에 Write할 때 Position이라는 변수를 사용했고 그 Position이라는 변수를 Read 에서 사용했고 이미 맨 뒤에 위치해있는다.이후 Position부터 읽어오기 때문에 계속 아무 데이터도 넘어오지 않아서 삽질을 했다......

 

결국 파일을 다시 정상적으로 읽어오려면 Position에서 Start쪽으로 이동되어야 한다.

 

즉, Position = buffer의 첫 주소 가 되어야 한다.

 

뭐.... 이거는 Position의 위치만 옮기는 것이기에 메모리가 직렬적으로 배열처럼 붙어있는 형태면 사용된 메모리 주소를 감산해서 이동해도 되고 buffer의 주소를 가지고 있으면 치환하면 된다.

 

또 언어마다 다르겠지만 단순히 File을 닫고 파일의 주소를 참조 해던 주소 값들을 삭제해도 생성해놨던 Stream이나 Buffer들을 동적으로 할당해놨으면 free하는거를 까먹지 말자....

 

C에서는 파일을 닫으면 자동으로 스트림을 삭제해주긴 하는데 가끔 안해주는 언어도 있다고 한다.

 

그런 특정한 언어들은 불필요한 사용을 없애기 위해 steram이나 buffer 사이즈를 0으로 맞춰서 조절하여 혹시 모를 대비를 한다.

 

파일 읽어올 때 encoding이나 decoding을 할까 했는데.... 이거도 무작정 인코딩, 디코딩 하지말고 해당 파일이 바이너리 파일인지 아닌지.... 유니코드 형식 인지에 따라 다르게 해야한다고 한다..... encoding, decoding도 그냥 해버릴 생각했는데 저 행동만으로 속도를 많이 잡아먹는듯 했다.

오늘의 요약

 

1. file을 쓰는 Write함수는 파일에 대한 Stream을 생성하여 열고 buffer도 생성한다음 텍스트 작성을 해야한다.


2. file을 읽는 read함수는 생성한 버퍼로 읽어올 수 있고 주소값을 기준으로 읽어오기 때문에 만약 buffer를 통해 읽어오려했던 변수를 재활용하면 버퍼주소에 첫 주소값으로 치환한다음 읽어와야한다.


3. 파일을 닫고 모든 주소 값을 다 free해도 stream에는 여전히 특정 message가 남아 있을 수 도 때문에 만약 stream 삭제가 안되는 언어면 stream이나 buffer 사이즈를 0으로 바꿔 불필요한 사용을 없앨 수 있다.


4. 파이썬이나 자바스크립트는 .(점)을 통해 접근해도 속도차이가 나지 않지만 특정 컴파일 언어에서는 .을 통해 접근하게 되면 객체를 복사해버리기 때문에 해당 주소로 읽는 방법이 더 빠르다.