신이 아니고서야 오더를 내리는 입장이나 오더를 받는 입장이나 완벽할 수는 없으니깐요 'ㅡ'
그래서 질문자님께서 지금 중요하게 생각하고 계신 "다음주까지는 무리일것같습니다" 라는 말씀도 물론 할수 있는거죠. 하지만 여기서 중요한것이 하나 빠졋는데
왜 다음주까지 무리인지에 대한 이유를 나름대로 찾으셔야 합니다.
몇개 옵션을 생각해보면 다음과 같겠네요.
1. 옮기는 것은 가능하나 양이 많기 때문에 자동으로 돌려도 어느정도 시간이 필요 (자동 방법이 있는 경우) 2. 옮기는 것은 가능하나 수작업으로 많은 양을 해야 하기 때문에 어느 정도 시간이 필요 (수동 방법이 있는 경우) 3. 구조가 복잡하여 옮기는 것이 불가능하여 가능한 방법을 모색 중 (옮기는 것이 불가능 한경우) 4. 가능한지 불가능한지 결정이 안남. 방법에 대한 조언이 필요. (뭐가 이유인지 모르는 경우) 5. 가능한지 불가능한지 결정이 안나는 와중에 데드라인에 옴. 빠따.
당연한 이야기 이겠지만 5번이 최악입니다. 5번을 피하기 위해서 최소 4번위로는 오더를 내리신분과 얘기를 하시는게 좋을 것 같습니다.
어쨋든 드리고 싶은 말은 오더 내리신분께 작성자님이 현재 문제를 파악했고 방식을 찾고 있다 라는 느낌이 들도록 설명을 드리는 것 입니다.
제 생각엔 "다음주 까지 힘들것 같다" 보단 "이런 방식으로 진행해봣는데 얼마가 걸릴것 같다. 혹시 다른 방법이 있나? 없으면 이 계산대로 기간이 좀 더 필요하다" 라고 말씀하시는게 좋을것 같습니다.
먼저 실행 가능한 상태 또는 읽고 쓰기 가능한 상태등의 권한은 세그먼트 (섹션) 단위로 결정이 됩니다.
아마 UPX 같은거 보면 실행 가능한 세그먼트가 2개 읽고 쓰기 가능한 세그먼트가 1개 일텐데요. 예를들어 다음과 같이 동작합니다.
segment 1: 0x00 으로 채워진 세그먼트 (읽고 쓰고 실행 가능한 권한) segment 2: packer 의 기본 기능이 있는 세그먼트 (실행 가능 권한) segment 3: 실제 실행될 (작성자님 예에서 A) 프로그램의 바이너리를 가지고 있는 세그먼트 (읽고 쓰기 권한)
프로그램이 실행되면 segment 2에서 먼저 시작이 되고 (실행 한다는 의미는 코드 영역임을 의미) segment 3에 있는 데이터를 자신만의 혹은 특정 알고리즘을 이용하여 segment 1로 옮깁니다. 모두 옮겼으면 마지막에는 jmp segment 1로 이동하여 풀어진 바이너리를 코드처럼 실행합니다. (프로그램 A)
그림으로 잘 표현된 슬라이드가 있어서 링크 하나 첨부 합니다. 29페이지를 보시면 아마 이해가 잘 되실것 같아요