<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>공부기록장</title>
    <link>https://po3nyo.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 6 Aug 2026 18:39:59 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>po3nyo</managingEditor>
    <image>
      <title>공부기록장</title>
      <url>https://tistory1.daumcdn.net/tistory/5389267/attach/5c7ff9b1df5840529de814c93e57382f</url>
      <link>https://po3nyo.tistory.com</link>
    </image>
    <item>
      <title>[리버싱 핵심원리] ch13. PE File Format</title>
      <link>https://po3nyo.tistory.com/218</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. PE File 소개&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;PE(Portable Excutable) 파일은 Windows 운영체제에서 사용되는 실행 파일 형식이다. 기존 UNIX에서 사용되는 COFF(Commeon Object File Format)를 기반으로 Microsoft에서 만들었다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;● 분류&amp;nbsp;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;32비트 형태의 실행 파일 : PE (또는 PE32)&lt;/li&gt;
&lt;li&gt;64비트 형태의 실행 팡리 : PE+ ( 또는 PE32+)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. PE File Format&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● 종류&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;종류&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;주요 확장자&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;실행계열&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;EXE,SCR&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;라이브러리 계열&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;DLL, OCX, CPL, DRV&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;드라이브 계열&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;SYS, VXD&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;오브젝트 파일 계열&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;OBJ&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. PE File 기본 구조&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;PE-Structure.webp&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Updtj/btrVzJQjMRx/lag0csLAN6mceIfvkufF21/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Updtj/btrVzJQjMRx/lag0csLAN6mceIfvkufF21/img.webp&quot; data-alt=&quot;PE File 기본구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Updtj/btrVzJQjMRx/lag0csLAN6mceIfvkufF21/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUpdtj%2FbtrVzJQjMRx%2Flag0csLAN6mceIfvkufF21%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;473&quot; data-filename=&quot;PE-Structure.webp&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PE File 기본구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;각 실행파일에는 UNIX 시스템에서 사용되는 실행파일, 개체 코드 및 공유 라이브러리 컴퓨터 파일의 형식인&amp;nbsp; &lt;b&gt;COFF(Common Object File Format)&lt;/b&gt;라는 공통 형식이 있다. 그리고 &lt;b&gt;PE(Portable Executable)&lt;/b&gt;형식은 현재 WIndows 운영체제의 32비트 및 64비트 버전에서 실행파일, 개체코드, DLL, FON 글꼴 파일 및 코어 덤프에 사용할 수 있는 COFF 방식중 하나이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 &lt;b&gt;Linux의 ELF(Excutable Link File)&lt;/b&gt; 형식이 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;PE(Portable Excutable) 파일형식&lt;/b&gt;은 WIndows OS 로더에 래핑된 실팽코드를 관리하는데 필요한 정보를 알려주는 데이터 구조이다. 여기에는 연결, API 내보내기, 테이블 가져오기, 리소스 관리 데이터 및 TLS 데이터에 대한 동적 라이버르리 참조가 포함된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;디스크의 데이터 구조는 메모리에서 사용되는 데이터 구조와 동일하며 PE 파일에서 무언가를 찾는 방법을 알고 있다면 파일이 메모리에 로드된 후 거의 확실하게 정확한 정보를 찾을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;PE 파일은 단일 메모리 매핑 파일로 메모리에 매핑되지 않는 다는 점에 유의해야한다. 대신 WIn32 로더는 PE 파일을 보고 매핑할 부분을 결정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;메모리의 모듈은 프로세스에 필요한 실팽 파일의 모든 코드, 데이터 및 리소스를 나타낸다. PE파일의 다른 부분은 읽을 수 있지만 매핑할 수는 없다. 예를 들어 디버그 정보가 파일 끝에 배치되는 경우와 같이 일부 부분은 전혀 매핑되지 않을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;PE 헤더의 필드는 실행파일을 메모리에 매핑하기 위해 따로 설정해야 하는 메모리 양의 시스템에 알려준다. 매핑되지 않는 데이터는 매핑될 부분을 지나서 파일 끝에 배치된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;PE 데이터 구조에는 &lt;b&gt;DOS Header, DOS Stub, PE File Header, Image Optional Header, Section Table, Data Dictionaries, and Sections.&lt;/b&gt;이 포함된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HxD 로&amp;nbsp; 메모장(notepad.exe) 을 열어 자세히 살펴보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(윈도우에 기본제공 되는 notepad.exe를 열어도 되지만 실습과 똑같은 값을 얻고 싶다면 예제파일안의 notepad.exe.를 이용하자)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.1 DOS Header&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-01-07 123908.jpg&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/51jU9/btrVzJbHPFd/qUk6G1yVTEsO5AJRaLoCe0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/51jU9/btrVzJbHPFd/qUk6G1yVTEsO5AJRaLoCe0/img.jpg&quot; data-alt=&quot;DOS Header&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/51jU9/btrVzJbHPFd/qUk6G1yVTEsO5AJRaLoCe0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F51jU9%2FbtrVzJbHPFd%2FqUk6G1yVTEsO5AJRaLoCe0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;770&quot; height=&quot;117&quot; data-filename=&quot;화면 캡처 2023-01-07 123908.jpg&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DOS Header&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;DOS 헤더는 파일의 처음 64바이트를 차지한다. 위의 이미지와 같이 HxD로 프로그램을 열었을때 처음 4개 행이다. 파일의 시작부분에 언급되는 ASCII 문자열 &quot;MZ&quot;를 볼수 있는데 이 MZ 는 5Ah 4Dh로 읽히는 DOS 헤더의 처음 두바이트(16진수 : 4D5A 또는 0x54AD)를 차지한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;WTyFT.png&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blXIu6/btrVBdQzVy8/AFHKyxPYXKYkjqmIAadeVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blXIu6/btrVBdQzVy8/AFHKyxPYXKYkjqmIAadeVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blXIu6/btrVBdQzVy8/AFHKyxPYXKYkjqmIAadeVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblXIu6%2FbtrVBdQzVy8%2FAFHKyxPYXKYkjqmIAadeVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;268&quot; data-filename=&quot;WTyFT.png&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MZ는 MS-DOS 개발자 중 한명인 Mark Zbikowski의 이니셜이다. 이필드는 e_magic 또는 매직넘버라고 하며 MS-DOS 호환파일 유형을 식별하는 필수 필드이다. 모든 MS-DOS 호환 실행파일은 이 값을 0x5A4D( ASCII의 &quot;MZ&quot;)로 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;마지막 필드인 e_lfanew는 4바이트 오프셋 (F0 00 00 00) 이며&amp;nbsp; PE File 헤더(NT Header)가 있는 위치를 알려준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.2 DOS Stub Program&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-01-07 133307.jpg&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zRDzx/btrVALGMtQU/kBuAJy9xXs0kWO5z0Krdz0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zRDzx/btrVALGMtQU/kBuAJy9xXs0kWO5z0Krdz0/img.jpg&quot; data-alt=&quot;Dos Stub Program&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zRDzx/btrVALGMtQU/kBuAJy9xXs0kWO5z0Krdz0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzRDzx%2FbtrVALGMtQU%2FkBuAJy9xXs0kWO5z0Krdz0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;770&quot; height=&quot;203&quot; data-filename=&quot;화면 캡처 2023-01-07 133307.jpg&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Dos Stub Program&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;스텁은 애플리케이션 실행이 시작될 때 기본적으로 실행되는 작은 프로그램 또는 코드 조각이다. 프로그램이 Windows 와 호환되지 않을 때 &quot;&lt;b&gt;This program cannot be run in DOS mode&quot;&amp;nbsp;&lt;/b&gt;라는 메시지를 출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;따라서 Win32를 지원하지 않는 환경에서 Win32 기반 프로그램을 실행하면 오류 메시지가 표시된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이경우 실행 파일이 로드될 때 &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;real-mode stub 프로그램이 MS-DOS에 의해 실행된다. Windows 로더가 PE 파일을 메모리에 매핑할 때 매핑되는 파일의 첫 번째 바이트는 MS-DOS 스텁의 첫 번째 바이트에 해당한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;2.3 PE File Header ( NT Header)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-01-07 165025.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqhYcH/btrVBehH0xy/caYJCsk3iBrxPu0ypEpjO1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqhYcH/btrVBehH0xy/caYJCsk3iBrxPu0ypEpjO1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqhYcH/btrVBehH0xy/caYJCsk3iBrxPu0ypEpjO1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqhYcH%2FbtrVBehH0xy%2FcaYJCsk3iBrxPu0ypEpjO1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;770&quot; height=&quot;331&quot; data-filename=&quot;화면 캡처 2023-01-07 165025.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;PE Header는 MS-DOS 헤더의 &lt;b&gt;e_lfanew 필드를 보면 찾을수 있다&lt;/b&gt;. e_lfanew 필드는 PE 헤더 위치의 오프셋을 제공한다. &lt;b&gt;필드 e_lefanew는 새 .exe 헤더의 파일 헤더를 나타낸다( NT Header)&lt;/b&gt; 기본 PE 헤더는 &lt;b&gt;IMAGE_NT_HEADERS&lt;/b&gt; 유형의 구조이며 주로 &lt;b&gt;SIGNATURE, IGMAGE_FILE_HEADER 및 IMAGE_OPTIONALHEADER&lt;/b&gt; 를 포함한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;SIGNATURE&lt;/b&gt; :&amp;nbsp; 4바이트 Dword Signature 이다. 아래 사진의 경우 PE 헤더에 대한 오프셋 세트는 000000E0이고 PE Signature는 50 45 00 00 에서 시작한다. (문자 PE 뒤에 두 개의 종료 00 이 있음)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-01-07 170156.jpg&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/en9lY8/btrVAZEWSSS/KFO6wZhH3T07CL6nWpHTyK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/en9lY8/btrVAZEWSSS/KFO6wZhH3T07CL6nWpHTyK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/en9lY8/btrVAZEWSSS/KFO6wZhH3T07CL6nWpHTyK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fen9lY8%2FbtrVAZEWSSS%2FKFO6wZhH3T07CL6nWpHTyK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;757&quot; height=&quot;61&quot; data-filename=&quot;화면 캡처 2023-01-07 170156.jpg&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;IMAGE_FILE_HEADER&lt;/b&gt; :&amp;nbsp; 파일 헤더는 PE 파일의 다음 20바이트이며 파일 레이아웃에 대한 가장 기본적인 정보만 포함한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-01-07 170505.jpg&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uPHzf/btrVALtmGUB/syF9GKuADX3NbQOdKkp9jk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uPHzf/btrVALtmGUB/syF9GKuADX3NbQOdKkp9jk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uPHzf/btrVALtmGUB/syF9GKuADX3NbQOdKkp9jk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuPHzf%2FbtrVALtmGUB%2FsyF9GKuADX3NbQOdKkp9jk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;770&quot; height=&quot;326&quot; data-filename=&quot;화면 캡처 2023-01-07 170505.jpg&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;318&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위 그림에서 드래그한 부분은 이식 가능한 실행파일의 헤더를 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;※ IMAGE_FILE_HEADER 필드 참고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Image-File-Header_New.webp&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cV6Nj6/btrVALNEjs6/0KuHNUMF9ME0tMzafbISO1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cV6Nj6/btrVALNEjs6/0KuHNUMF9ME0tMzafbISO1/img.webp&quot; data-alt=&quot;IMAGE_FILE_HEADER&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cV6Nj6/btrVALNEjs6/0KuHNUMF9ME0tMzafbISO1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcV6Nj6%2FbtrVALNEjs6%2F0KuHNUMF9ME0tMzafbISO1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;497&quot; height=&quot;240&quot; data-filename=&quot;Image-File-Header_New.webp&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;IMAGE_FILE_HEADER&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;IMAGE_OPTIONAL_HEADER&lt;/b&gt; : IMAGE_FILE_HEADER 데이터 구조에 포함된 기본 정보 이외의 몇 가지 중요한 정보가 포함되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Magic&lt;/b&gt; : Magic 필드는 실행 가능한 이미지가 32비트인지 64비트인제 알려준다. Magic 필드에 설정된 값은 &lt;b&gt;IMAGE_NT_OPTIONAL_HDR_MAGIC&lt;/b&gt; 이며, 그 값은 &lt;b&gt;32비트 어플리케이션&lt;/b&gt;에서는 &lt;b&gt;IMAGE_NT_OPTIONAL_HDR32_MAGIC(0x10b)&lt;/b&gt; 이며, &lt;b&gt;64비트 어플리케이션&lt;/b&gt;에서는 &lt;b&gt;IMAGE_NT_OPTIONAL_HDR64_MAGIC(0x20b)&lt;/b&gt;로 정의된다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AddressOfEntryPoint&lt;/b&gt; : Windows 로더가 실행을 시작할 주소이다. &lt;b&gt;모듈의 진입점(EP)&lt;/b&gt;의 &lt;b&gt;RVA(상대 가상주소)&lt;/b&gt;를 보유하며 일반적으로 .text 섹션에서 찾을 수 있다. 실행파일의 경우 시작 주소이다. 장치 드라이버의 경우 초기화된 함수의 주소이다. 진입점 함수는 DLL에 대해 선택 사항이며 진입점이 없으면 이 멤버는 0이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;BaseOfCode&lt;/b&gt; 및 &lt;b&gt;BaseOfData&lt;/b&gt; 멤버는 각각 코드 및 데이터 섹션 시작부분의 RVA를 보유한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ImageBase&lt;/b&gt; : 실행파일이 메모리의 특정 위치에 메모리 매핑될 주소이다. Windows NT 에서 실팽하일의 기본 이미지 기반은 0x10000 이고 DLL 경우 기본 이미지는 0x400000이다. Windows 95의 경우 &lt;b&gt;주소 0x10000은 모든 프로세스가 공유하는 선형 주소 영역에 있기 때문에 32비트 EXE를 로드하는 데 사용할 수 없다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 때문에 Microsoft는 Win32 실행 파일의 기본 기본 주소를 0x400000으로 변경하기로 결정,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;따라서 기본적으로 응용 프로그램의 경우 0x400000이고 DLL의 경우 0x10000000이다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SectionAlignment&amp;nbsp;&lt;/b&gt;및&amp;nbsp;&lt;b&gt;FileAlignment:&lt;/b&gt; 두 멤버는 각각 메모리와 파일에서 PE 섹현의 정렬을 나타낸다. 실행파일이 메모리에 매핑되면 해당 실행 파일의 각 섹션은 이 값의 배수인 가상 주소에서 시작한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SizeOfImage :&amp;nbsp;&lt;/b&gt;SizeOfImage 멤버는 런타임에 PE 파일이 차지하는 메모리 크기를 나타낸다. SectionAlignment 값의 배수여야 한다.&lt;/li&gt;
&lt;li&gt;Subsystem : 이 필드는 실행 파일의 대상 하위 시스템, 즉 실행 파일이 사용자 인터페이스에 사용하는 하위 시스템&amp;nbsp; 유형을 식별한다. 가능한 각 하위 시스템 값은 WINNT.H 파일에 정의 되어 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-01-07 173754.jpg&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P9d0P/btrVALmBiWf/Tu38rcMdq6wHGoO57XHbxk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P9d0P/btrVALmBiWf/Tu38rcMdq6wHGoO57XHbxk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P9d0P/btrVALmBiWf/Tu38rcMdq6wHGoO57XHbxk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP9d0P%2FbtrVALmBiWf%2FTu38rcMdq6wHGoO57XHbxk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;233&quot; data-filename=&quot;화면 캡처 2023-01-07 173754.jpg&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;마지막으로 IMAGE_OPTIONAL_HEADER 구조의 끝에서 다음은 소위 IMAGE_DATA_DIRECTORY 구조의 Data Directory 배열 이다. Data Directory 멤버는IMAGE_DATA_DIRECOTRY 구조의 첫번째를 가리킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;IMAGE_DATA_DIRECTORY :&amp;nbsp; Data Directory 필드는 파일에서 실행 가능한 정보의 다른 중요한 구성요소를 찾을 위치를 나타낸다. 이 필드의 구조는 선택적 헤더 구조의 맨 아래에 있다. 현재 PE 파일 형식은 16개의 가능한 데이터 구조를 정의하며 그 중 11개가 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음은 일부 데이터 디렉토리 이다.&lt;/p&gt;
&lt;pre id=&quot;code_1673080965796&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Directory Entries

 // Export Directory
 define IMAGE_DIRECTORY_ENTRY_EXPORT         0
 // Import Directory
 define IMAGE_DIRECTORY_ENTRY_IMPORT         1
 // Resource Directory
 define IMAGE_DIRECTORY_ENTRY_RESOURCE       2
 // Exception Directory
 define IMAGE_DIRECTORY_ENTRY_EXCEPTION      3
 // Security Directory
 define IMAGE_DIRECTORY_ENTRY_SECURITY       4
 // Base Relocation Table
 define IMAGE_DIRECTORY_ENTRY_BASERELOC      5
 // Debug Directory
 define IMAGE_DIRECTORY_ENTRY_DEBUG          6
 // Description String
 define IMAGE_DIRECTORY_ENTRY_COPYRIGHT      7
 // Machine Value (MIPS GP)
 define IMAGE_DIRECTORY_ENTRY_GLOBALPTR      8
 // TLS Directory
 define IMAGE_DIRECTORY_ENTRY_TLS            9
 // Load Configuration Directory
 define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG    10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;각 데이터 디렉토리 항목은 디렉토리의 크기와 상대 가상주소를 지정한다. 특정 디렉터리를 찾으려면 먼저 선택적 헤더의 데이터 디렉터리 배열에서 상대 가상주소를 결정해야한다. 그 다음 가상 주소를 사용하여 디렉토리가 있는 세션을 결정해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;디렉토리가 포함된 섹션을 식별하면 해당 섹션의 섹션 헤더를 사용하여 데이터 디렉토리의 정확한 파일 오프셋 위치를 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 섹션 헤더 테이블&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;섹션 헤더 테이블은 IMAGE_SECTION_HEADER 구조의 배열이며 실행 파일의 이미지에서 사용할 수 있는 다양한 섹션과 관련된 정보를 포함한다. 이미지의 섹션은 사전순이 아닌 RVA를 기준으로 정렬된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;섹션 헤더 테이블에는 다음과 같은 중요한 필드가 포함되어 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SizeOfRawData : 파일에서 섹션의 실제 크기를 지정한다. 이값을 PointerToRawData 값과 합하면 자체의 크기가 된다.&lt;/li&gt;
&lt;li&gt;VirtualSize : 메모리에 있는 섹션의 크기를 나타낸다.&lt;/li&gt;
&lt;li&gt;PointerToRawData : 파일에서 RawData 섹션이 시작되는 오프셋이다. 따라서 위의 값에 이것을 추가하고 파을 정렬 속성이 기본값으로 설정되어 있다면 파일에서 다음 섹션이 시작되는 위치의 오프셋을 얻을 수 있다.&lt;/li&gt;
&lt;li&gt;VirtualAddress : 메모리 섹션의 RVA 이다. VirtualAddress 및 VirtualSize 정보를 사용하며 메모리 정렬 속성이 기본값으로 설정되어 있다면 다음 섹션의 RVA를 얻을 수 있다.&lt;/li&gt;
&lt;li&gt;characteristics : 플래그(R, RW, RWE 등)로 표시된 메모리의 해당 섹션에 대한 메모리 액세스 권한에 대해 알려준다. 이러한 플래그는 섹션이 실행가능, 읽기가능, 쓰기가능 또는 이들의&amp;nbsp; 일부 조합인지 여부를 설명한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 섹션&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;PE 파일 섹션 헤더는 또한 Name 이라는 간단한 문자 배열 필드를 사용하여 섹션 이름을 지정한다. 다음은 실행파일에서 사용할 수 있는 다양한 공통 섹션 이름이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.text : 일반적으로 첫 번째 섹션이며 응용 프로그램의 실행 코드를 포함한다. 이 섹션 안에는 애플리케이션의 진입점 ( 실행될 첫 번째 애플리케이션 명령의 주소)가 존재한다. 애플리케이션은 실행코드가 포함된 섹션을 두개이상 가질 수 있다.&lt;/li&gt;
&lt;li&gt;.data : 문자열과 같은 애플리케이션의 초기화된 데이터가 포함된다.&lt;/li&gt;
&lt;li&gt;.rdata 또는 .idata : 이름가져오기 테이블이 있는 섹션에 사용된다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;.reloc : 재배치 정보를 포함한다.&lt;/li&gt;
&lt;li&gt;.rsrc : 애플리케이션의 UI에서 사용되는 이미지와 같은 항목을 포함하는 리소스 컨테이너 섹션이다.&lt;/li&gt;
&lt;li&gt;.debug : 디버그 정보를 포함한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이러한 섹션의 이름은 사용자에 의해 수정이 가능하며 배열의 길이가 8바이트에 불과하기 때문에 PE 섹션 이름은 8자로 제한된다. 최대 길이는 ASCII 문자 8자이며 각 섹션에는 고유한 특성(메모리에 대한 엑세스 권한)이 있다.&lt;/p&gt;</description>
      <category>Reverse Engineernig/study</category>
      <author>po3nyo</author>
      <guid isPermaLink="true">https://po3nyo.tistory.com/218</guid>
      <comments>https://po3nyo.tistory.com/218#entry218comment</comments>
      <pubDate>Sun, 8 Jan 2023 23:26:49 +0900</pubDate>
    </item>
    <item>
      <title>[리버싱 핵심원리] ch.10 함수 호출 규약</title>
      <link>https://po3nyo.tistory.com/217</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 함수 호출 규약(Calling Convention)&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;함수 호출 후에 ESP(스택 포인터)를 어떻게 정리하는에 대한 약속&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● &lt;b&gt;함수를 호출할 때 파라미터를 어떻게 처리할까?&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수 실행 전 : 스택을 통하여 파라미터를 전달&lt;/li&gt;
&lt;li&gt;함수 실행 후 : 사용한 스택 정리&lt;/li&gt;
&lt;li&gt;&amp;rarr; 스택에 저장된 파라미터는 삭제되지 않는다&lt;/li&gt;
&lt;li&gt;&amp;rarr; ESP 값을 수정하여 저장된 파라미터가 더 이상 유효한 데이터가 아님을 명시적으로 기록해둔다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● &lt;b&gt;함수 실행 후, 누가 어떻게 스택을 정리할까?&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수 호출 규약 : cdelcl, stdcall, fastcall&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.1 cdecl&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주로 C언어에서 사용되는 방식&lt;/li&gt;
&lt;li&gt;Caller (함수를 호출한 쪽)에서 스택을 정리한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-01-03 163339.jpg&quot; data-origin-width=&quot;322&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvEIdS/btrVeVwRHus/3hQeR7s2Jnig6dY4ehfHOk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvEIdS/btrVeVwRHus/3hQeR7s2Jnig6dY4ehfHOk/img.jpg&quot; data-alt=&quot;cdecl 예제 코드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvEIdS/btrVeVwRHus/3hQeR7s2Jnig6dY4ehfHOk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvEIdS%2FbtrVeVwRHus%2F3hQeR7s2Jnig6dY4ehfHOk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;250&quot; height=&quot;287&quot; data-filename=&quot;화면 캡처 2023-01-03 163339.jpg&quot; data-origin-width=&quot;322&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;cdecl 예제 코드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;cdecl 방식의 예제 코드이다. 컴파일후 x64dbg로 열어보면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-01-03 162727.jpg&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1Inxk/btrVclv5nQy/OBKkHubKsuphKdDSAl9Wk1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1Inxk/btrVclv5nQy/OBKkHubKsuphKdDSAl9Wk1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1Inxk/btrVclv5nQy/OBKkHubKsuphKdDSAl9Wk1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1Inxk%2FbtrVclv5nQy%2FOBKkHubKsuphKdDSAl9Wk1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;750&quot; height=&quot;236&quot; data-filename=&quot;화면 캡처 2023-01-03 162727.jpg&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;add() 함수의 파라미터 1,2 를 역순으로 스택에 저장하고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;add()함수 &amp;lt;401000&amp;gt; 을 호출한후&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;add esp, 8 명열으로 스택을 정리하고있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;※ cdecl 방식의 장점은 C 언어의 printf() 함수와 같이 가변 길이 파라미터를 전달할 수 있다는것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 이러한 가변 길이 파라미터는 다른 호출 규약에서는 구현이 어렵다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.2 stdcall&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;win32 API 에서 사용&lt;/li&gt;
&lt;li&gt;Callee (피호출자, 호출되는함수) 에서 스택을 정리한다.&lt;/li&gt;
&lt;li&gt;C언어는 기본적으로 cdecl 방식이지만, _stdcall 키워드를 사용하여 컴파일 하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-01-03 164212.jpg&quot; data-origin-width=&quot;331&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfqIEL/btrVecTfSXZ/xGqtZrDfBU3JzSbwDkFEbK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfqIEL/btrVecTfSXZ/xGqtZrDfBU3JzSbwDkFEbK/img.jpg&quot; data-alt=&quot;stdcall 예제 코드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfqIEL/btrVecTfSXZ/xGqtZrDfBU3JzSbwDkFEbK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfqIEL%2FbtrVecTfSXZ%2FxGqtZrDfBU3JzSbwDkFEbK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;250&quot; height=&quot;205&quot; data-filename=&quot;화면 캡처 2023-01-03 164212.jpg&quot; data-origin-width=&quot;331&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;stdcall 예제 코드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;stdcall 방식의 예제코드이다 컴파일후 x64dbg 로 열어보면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2023-01-03 164337.jpg&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTdMCf/btrVaR20jKv/tst6kKI0JCmLndz3Oug4iK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTdMCf/btrVaR20jKv/tst6kKI0JCmLndz3Oug4iK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTdMCf/btrVaR20jKv/tst6kKI0JCmLndz3Oug4iK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTdMCf%2FbtrVaR20jKv%2Ftst6kKI0JCmLndz3Oug4iK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;685&quot; height=&quot;213&quot; data-filename=&quot;화면 캡처 2023-01-03 164337.jpg&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;위의 사진과 같이 스택의 정리는&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;add() 함수의 마지막 RETN 8 명령에서 수행된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 RETN 8 명령어는 RETN + POP8바이트 를 의미한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;즉 리턴 후 지정도니 크기만큼 ESP를 증가시키는 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;※ stdcall 방식의 장점은 호출되는 함수 내부에 스택정리 코드가 존재하므로,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;호출 때마다 스택을 정리하기 위한 코드를 Caller에 추가할 필요가 없어&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전체 코드 크기를 줄일 수 있다&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.3 fastcall&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본적 stdcall 방식&lt;/li&gt;
&lt;li&gt;함수에 전달하는 파라미터 일부(2개까지)를 스택 메모리가 아닌 레지스터(ECX, EDX)를 이용하여 전달한다.&lt;/li&gt;
&lt;li&gt;함수 호출 시, 보다 빠른 처리가 가능하다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Reverse Engineernig/study</category>
      <author>po3nyo</author>
      <guid isPermaLink="true">https://po3nyo.tistory.com/217</guid>
      <comments>https://po3nyo.tistory.com/217#entry217comment</comments>
      <pubDate>Tue, 3 Jan 2023 17:14:19 +0900</pubDate>
    </item>
    <item>
      <title>[리버싱 핵심원리] ch08. abex' crackme2</title>
      <link>https://po3nyo.tistory.com/216</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 프로그램 확인&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VB(Visual Basic) 으로 작성된 프로그램이다.&lt;/li&gt;
&lt;li&gt;시리얼 키(serial key)를 검증하는 프로그램이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-29 125809.jpg&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnzoYZ/btrUNqR3khk/jFoiuhQNFfKJybPSKHkHUk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnzoYZ/btrUNqR3khk/jFoiuhQNFfKJybPSKHkHUk/img.jpg&quot; data-alt=&quot;abex' crackme2 실행시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnzoYZ/btrUNqR3khk/jFoiuhQNFfKJybPSKHkHUk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnzoYZ%2FbtrUNqR3khk%2FjFoiuhQNFfKJybPSKHkHUk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;168&quot; data-filename=&quot;화면 캡처 2022-12-29 125809.jpg&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;abex' crackme2 실행시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-29 125835.jpg&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tJxOL/btrUSvK7ZGh/RGta31z8DtQmkEPMkfL2j1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tJxOL/btrUSvK7ZGh/RGta31z8DtQmkEPMkfL2j1/img.jpg&quot; data-alt=&quot;이름과 시리얼번호가 틀렸을때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tJxOL/btrUSvK7ZGh/RGta31z8DtQmkEPMkfL2j1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtJxOL%2FbtrUSvK7ZGh%2FRGta31z8DtQmkEPMkfL2j1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;165&quot; data-filename=&quot;화면 캡처 2022-12-29 125835.jpg&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이름과 시리얼번호가 틀렸을때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. VB(Visual Basic) 파일의 특징&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 Visual Basic (VB) 전용 엔진&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VB 파일은 MSVBVM60.dll (Microsoft Visual Basic Virtual Machine 6.0) 이 라는&amp;nbsp;VB 전용 엔진을 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-30 160119.jpg&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ssmiD/btrUV9huVuL/P9mQbKhckubWrpvkc25tck/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ssmiD/btrUV9huVuL/P9mQbKhckubWrpvkc25tck/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ssmiD/btrUV9huVuL/P9mQbKhckubWrpvkc25tck/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FssmiD%2FbtrUV9huVuL%2FP9mQbKhckubWrpvkc25tck%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;793&quot; height=&quot;167&quot; data-filename=&quot;화면 캡처 2022-12-30 160119.jpg&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 메시지 박스를 출력하고 싶을때 VB 소스코드에서 MsgBox() 함수를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; VB 컴파일러는 실제로 MSVBVM60.dll!rtcMsgBox() 함수가 호출되도록 만들고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 이 함수 내부에서 Win32 API인 user32.dll!messageBoxW() 함수를 호출해주는 방식으로 동작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2 N (Native) code vs. P (Pseudo) code&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VB 파일은 컴파일 옵션에 따라 N(Native) code와 P(Pseudo) code로 컴파일 된다.&lt;/li&gt;
&lt;li&gt;N (Native) code : 디버거에서 해석이 가능한 IA-32 Instruciton을 사용&lt;/li&gt;
&lt;li&gt;P (Pseudo) code : VB 엔진으로 가상 머신을 구현하여 자체적으로 해석 가능한 명령어 코드를 사용&lt;/li&gt;
&lt;li&gt;=&amp;gt; Interpreter 언어 개념으로 P code를 해석하려면 VB 엔진을 분석하여 에뮬레이터를 구현해야한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3 Event Handler&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VB 는 주로 GUI 프로그래밍을 할 때 사용한다.&lt;/li&gt;
&lt;li&gt;Windows 운영체제의 Event Driven 방식으로 동작한다.&lt;/li&gt;
&lt;li&gt;=&amp;gt; main() 혹은 WinMain() 에 사용자 코드가 존재하는 것이 아니라, 각 event handler 에 사용자 코드가 존재한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.4 undocumented 구조체&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VB에서 사용되는 각종 정보들 (Dialog, Control, Form, Module, Function등)은 내부적으로 구조체 형식으로 파일에 저장됨&lt;/li&gt;
&lt;li&gt;Microsoft에서는 구조체 정보는 비공개 &amp;rarr; VB 파일의 디버깅이 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 디버깅&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Reverse Engineernig/study</category>
      <author>po3nyo</author>
      <guid isPermaLink="true">https://po3nyo.tistory.com/216</guid>
      <comments>https://po3nyo.tistory.com/216#entry216comment</comments>
      <pubDate>Fri, 30 Dec 2022 17:21:26 +0900</pubDate>
    </item>
    <item>
      <title>[리버싱 핵심원리] ch07. 스택 프레임</title>
      <link>https://po3nyo.tistory.com/215</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 스택 프레임&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;스택 프레임&lt;/b&gt;이란 쉽게 말해서 &lt;b&gt;ESP &lt;/b&gt;(스택 포인터) 가 아닌 &lt;b&gt;EBP &lt;/b&gt;(베이스 포인터) 를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법을 말한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;스택 프레임&lt;/b&gt;을 이용해서 &lt;b&gt;함수 호출&lt;/b&gt;을 관리하면, 아무리 함수 호출 depth가 깊고 복잡해져도 스택을 완벽하게 관리할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.1 ESP vs. EBP&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;●&amp;nbsp; ESP&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ESP : 스택에 저장된 데이터의 최하위 주소값 (FILO)&lt;/li&gt;
&lt;li&gt;최근에 스택에 저장된 데이터의 주소값&lt;/li&gt;
&lt;li&gt;PUSH or POP 명령에 의해서 가변적, 따라서 특정 데이터가 저장된 주소 값을 알기가 어렵다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;●&amp;nbsp; EBP&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EBP : 함수에서 사용될 그택의 기준 주소 값&lt;/li&gt;
&lt;li&gt;함수가 호출된 후, 종료될 때까지 변경되지 않는 주소 값&lt;/li&gt;
&lt;li&gt;함수에서 스택에 저장된 데이터들의 주소값을 알려고 할 때 유용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.2 스택 프레임 구조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 161911.jpg&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEEhzf/btrURQuzjb5/VXtQeJNlkI1wrzZTFb7gZ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEEhzf/btrURQuzjb5/VXtQeJNlkI1wrzZTFb7gZ0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEEhzf/btrURQuzjb5/VXtQeJNlkI1wrzZTFb7gZ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEEhzf%2FbtrURQuzjb5%2FVXtQeJNlkI1wrzZTFb7gZ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;482&quot; data-filename=&quot;화면 캡처 2022-12-28 161911.jpg&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. stackframe.exe 실습&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.1 stackframe.cpp 소스코드&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1672216554350&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//stackframe.cpp
#include &quot;stdio.h&quot;

long add(long a, long b)
{
    long x = a, y = b;
    return (x + y);
}

int main(int argc, char* argv[])
{
    long a = 1, b = 2;
    
    printf(&quot;%d\n&quot;, add(a, b));

    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.2 stackframe.exe 디버깅&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 174834.jpg&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;547&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DCUXL/btrUNqDWpoV/WHvQ1erQknqDNkh9Fk7wxk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DCUXL/btrUNqDWpoV/WHvQ1erQknqDNkh9Fk7wxk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DCUXL/btrUNqDWpoV/WHvQ1erQknqDNkh9Fk7wxk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDCUXL%2FbtrUNqDWpoV%2FWHvQ1erQknqDNkh9Fk7wxk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;381&quot; data-filename=&quot;화면 캡처 2022-12-28 174834.jpg&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;547&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;x32dbg로 stackframe.exe 파일을 열고 [Ctrl + G] 명령어로&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;401000 주소로 이동하자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(옆에 주석은 이해를 돕기 위해 부가설명을 추가해놓았다.)&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;코드 흐름 순서에 맞게 main() 함수부터 살펴보자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;main()함수 &amp;lt;401020&amp;gt; 에 BP[F2]를 설치한후 [F9]를 눌러 실행해보자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;● main() 함수 시작 &amp;amp; 스택 프레임 생성&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;stackframe.cpp 에서 아래 코드 부분에 해당되는 내용이다.&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;br /&gt;int main(int argc, char* argv[])&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;{&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 182218.jpg&quot; data-origin-width=&quot;127&quot; data-origin-height=&quot;32&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9VerT/btrURPP7NL7/5E1rp7WnJ5jM2K4uqwXlZ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9VerT/btrURPP7NL7/5E1rp7WnJ5jM2K4uqwXlZ0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9VerT/btrURPP7NL7/5E1rp7WnJ5jM2K4uqwXlZ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9VerT%2FbtrURPP7NL7%2F5E1rp7WnJ5jM2K4uqwXlZ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;250&quot; height=&quot;63&quot; data-filename=&quot;화면 캡처 2022-12-28 182218.jpg&quot; data-origin-width=&quot;127&quot; data-origin-height=&quot;32&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 182241.jpg&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ncqk6/btrUOQoDtxe/KHkMkEbw7uZcHGeqKWrB7K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ncqk6/btrUOQoDtxe/KHkMkEbw7uZcHGeqKWrB7K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ncqk6/btrUOQoDtxe/KHkMkEbw7uZcHGeqKWrB7K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fncqk6%2FbtrUOQoDtxe%2FKHkMkEbw7uZcHGeqKWrB7K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;76&quot; data-filename=&quot;화면 캡처 2022-12-28 182241.jpg&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;main() 함수&lt;/b&gt; 시작시 &lt;b&gt;스택&lt;/b&gt;의 상태이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;현재 &lt;b&gt;ESP = 19FF2C&lt;/b&gt;이고, &lt;b&gt;EBP = 19FF70&lt;/b&gt; 이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여기서&lt;b&gt; ESP &amp;lt;19FF2C&amp;gt;&lt;/b&gt;에 저장된 값&lt;b&gt; 401250&lt;/b&gt;은 &lt;b&gt;main()함수&lt;/b&gt; 실행이 끝난후 돌아갈&lt;b&gt; 리턴주소&lt;/b&gt;이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;main() 함수는 시작하자마자 스택 프레임을 생성 시킨다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 183153.jpg&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;27&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dOaqcc/btrUNVRjpRO/hLJh20hzwg6HGVaM4MTyc1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dOaqcc/btrUNVRjpRO/hLJh20hzwg6HGVaM4MTyc1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dOaqcc/btrUNVRjpRO/hLJh20hzwg6HGVaM4MTyc1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdOaqcc%2FbtrUNVRjpRO%2FhLJh20hzwg6HGVaM4MTyc1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;770&quot; height=&quot;27&quot; data-filename=&quot;화면 캡처 2022-12-28 183153.jpg&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;27&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;  push&lt;/span&gt; &lt;span style=&quot;color: #409d00;&quot;&gt;ebp&lt;/span&gt; = EBP 값을 스택에 집어넣는다&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; main() 함수에서 EBP가 베이스 포인터의 역할을 하게 되므로&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;EBP가 이전에 가지고 있던 값을 스택에 백업해두기 위한 용도이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;함수 가 종료(리턴)되기 전에 이값을 회복시켜준다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  mov &lt;span style=&quot;color: #409d00;&quot;&gt;ebp&lt;/span&gt;, &lt;span style=&quot;color: #409d00;&quot;&gt;esp&lt;/span&gt;&lt;/b&gt; =&amp;nbsp; ESP 값을 EBP로 옮긴다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr;이 명령 이후 EBP는 현재 ESP와 같은 값을 가지게 되며,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;main()함수가 끝날 때까지 EBP 값을 고정된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;401020과 401021 주소의 두명령어에 의해 main()함수에 대한 스택 프레임이 생성되었다.&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;u&gt;&amp;lt;401021&amp;gt;까지 실행했을때&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 184934.jpg&quot; data-origin-width=&quot;122&quot; data-origin-height=&quot;32&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUUGKP/btrUN2CShym/MVR9uVqkkJDkbObEnxtvzK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUUGKP/btrUN2CShym/MVR9uVqkkJDkbObEnxtvzK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUUGKP/btrUN2CShym/MVR9uVqkkJDkbObEnxtvzK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUUGKP%2FbtrUN2CShym%2FMVR9uVqkkJDkbObEnxtvzK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;250&quot; height=&quot;66&quot; data-filename=&quot;화면 캡처 2022-12-28 184934.jpg&quot; data-origin-width=&quot;122&quot; data-origin-height=&quot;32&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 184948.jpg&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;55&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lyjZl/btrUNrC4p7y/kE5WOQY8xJPLsBcnjf0ptk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lyjZl/btrUNrC4p7y/kE5WOQY8xJPLsBcnjf0ptk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lyjZl/btrUNrC4p7y/kE5WOQY8xJPLsBcnjf0ptk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlyjZl%2FbtrUNrC4p7y%2FkE5WOQY8xJPLsBcnjf0ptk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;631&quot; height=&quot;55&quot; data-filename=&quot;화면 캡처 2022-12-28 184948.jpg&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;55&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;현재 &lt;b&gt;EBP&lt;/b&gt; 값은 &lt;b&gt;19FF28&lt;/b&gt;로 &lt;b&gt;ESP&lt;/b&gt; 와 &lt;b&gt;동일&lt;/b&gt;하며,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;19FF28 &lt;/b&gt;주소에는 &lt;b&gt;19FF70 = [main()함수 시작할 떄 EBP가 가지고 있던 초기값]&lt;/b&gt;이 저장된걸 알 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;● 로컬 변수 세팅&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;stackframe.cpp 에서 아래 코드부분에 해당되는 내용이다.&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;br /&gt;long a = 1, b = 2;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 190636.jpg&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;56&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by7Ojq/btrUPZZX9Ww/5iNywvS2yvJ4AULbWYYQ71/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by7Ojq/btrUPZZX9Ww/5iNywvS2yvJ4AULbWYYQ71/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by7Ojq/btrUPZZX9Ww/5iNywvS2yvJ4AULbWYYQ71/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby7Ojq%2FbtrUPZZX9Ww%2F5iNywvS2yvJ4AULbWYYQ71%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;51&quot; data-filename=&quot;화면 캡처 2022-12-28 190636.jpg&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;56&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;sub &lt;span style=&quot;color: #409d00;&quot;&gt;esp&lt;/span&gt;, &lt;span style=&quot;color: #a6bc00;&quot;&gt;8&lt;/span&gt; = ESP값에서 8을뺀다&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 로컬 변수&lt;b&gt; 'a'&lt;/b&gt;와&lt;b&gt; 'b'&lt;/b&gt;가 &lt;b&gt;long&lt;/b&gt; 타입이므로 각각 &lt;b&gt;4바이트&lt;/b&gt; 크기를 가지는데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 두 변수&lt;/b&gt;를 &lt;b&gt;스택에 저장&lt;/b&gt;하기 위해서는 총 &lt;b&gt;8바이트&lt;/b&gt;가 필요하기때문에&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ESP&lt;/b&gt; 에서 &lt;b&gt;8바이트&lt;/b&gt;를 빼서 두 변수에 필요한 &lt;b&gt;메모리 공간을 확보&lt;/b&gt;한 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;EBP 값은 main() 함수 내에서 고정이므로 이를 기준으로 삼아 로컬 변수에 접근할 수 있다.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt; &amp;nbsp; &lt;b&gt;mov &lt;span style=&quot;color: #006dd7;&quot;&gt;dword ptr&lt;/span&gt; &lt;span style=&quot;color: #ef5369;&quot;&gt;ss&lt;/span&gt;:[&lt;span style=&quot;color: #ef6f53;&quot;&gt;ebp&lt;/span&gt;-&lt;span style=&quot;color: #a6bc00;&quot;&gt;4&lt;/span&gt;], &lt;span style=&quot;color: #a6bc00;&quot;&gt;1&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;= [EBP-4] 에 1을 넣는다&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;mov&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;dword ptr&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;ss&lt;/span&gt;:[&lt;span style=&quot;color: #ef6f53;&quot;&gt;ebp&lt;/span&gt;-&lt;span style=&quot;color: #a6bc00;&quot;&gt;8&lt;/span&gt;],&lt;span style=&quot;color: #a6bc00;&quot;&gt; 2&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;= [EBP-8] 에 2을 넣는다&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;lt;40102D&amp;gt;까지 실행했을때 스택 상태&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 192026.jpg&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;27&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQSPY1/btrUNqjGJlZ/OE75ZKl9KltvMvESthNz7k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQSPY1/btrUNqjGJlZ/OE75ZKl9KltvMvESthNz7k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQSPY1/btrUNqjGJlZ/OE75ZKl9KltvMvESthNz7k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQSPY1%2FbtrUNqjGJlZ%2FOE75ZKl9KltvMvESthNz7k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;250&quot; height=&quot;56&quot; data-filename=&quot;화면 캡처 2022-12-28 192026.jpg&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;27&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 192044.jpg&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nqQbo/btrUM4Oxc6q/PcGgAdtWgxJEvHyE699Bk0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nqQbo/btrUM4Oxc6q/PcGgAdtWgxJEvHyE699Bk0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nqQbo/btrUM4Oxc6q/PcGgAdtWgxJEvHyE699Bk0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnqQbo%2FbtrUM4Oxc6q%2FPcGgAdtWgxJEvHyE699Bk0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;47&quot; data-filename=&quot;화면 캡처 2022-12-28 192044.jpg&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ESP&lt;/b&gt; 의 값이 &lt;b&gt;8&lt;/b&gt; 줄어들었고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;mov 명령어&lt;/b&gt;에 의해 &lt;b&gt;19FF24 = [EBP-4] 에 1이, 19FF20 = [EBP-8] 에 2가 저장되었다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;● add() 함수 파라미터 입력 및 add() 함수 호출&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;stackframe.cpp 에서 아래 코드 부분에 해당되는 내용이다.&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;br /&gt;printf(&quot;%d\n&quot;, add(a, b));&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 193447.jpg&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I6Y5r/btrUNrQw4Tz/Q8DJysIGBdUfDy6XJsx2Fk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I6Y5r/btrUNrQw4Tz/Q8DJysIGBdUfDy6XJsx2Fk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I6Y5r/btrUNrQw4Tz/Q8DJysIGBdUfDy6XJsx2Fk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI6Y5r%2FbtrUNrQw4Tz%2FQ8DJysIGBdUfDy6XJsx2Fk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;67&quot; data-filename=&quot;화면 캡처 2022-12-28 193447.jpg&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;b&gt; mov&lt;span style=&quot;color: #409d00;&quot;&gt; eax&lt;/span&gt;, &lt;span style=&quot;color: #006dd7;&quot;&gt;dword ptr&lt;/span&gt; &lt;span style=&quot;color: #ffc1c8;&quot;&gt;ss&lt;/span&gt;:[&lt;span style=&quot;color: #ef6f53;&quot;&gt;ebp&lt;/span&gt;-&lt;span style=&quot;color: #a6bc00;&quot;&gt;8&lt;/span&gt;] = 변수 b를 스택에 넣는다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;  push&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;eax&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;= EAX 값을 스택에 집어넣는다&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;b&gt; mov&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;eax&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;dword ptr&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ffc1c8;&quot;&gt;ss&lt;/span&gt;:[&lt;span style=&quot;color: #ef6f53;&quot;&gt;ebp&lt;/span&gt;-&lt;span style=&quot;color: #a6bc00;&quot;&gt;4&lt;/span&gt;] = 변수 a를 스택에 넣는다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;  push&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;ecx&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;= ECX 값을 스택에 집어넣는다&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr;&amp;nbsp;&lt;/b&gt;add() 함수는 파라미터로 a 와 b 를 받는다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;b&gt;※ &lt;/b&gt;&lt;/i&gt;&lt;b&gt;여기서 중요한점 : &lt;/b&gt;&lt;i&gt;파라미터가 C 언어의 입력 순서와 반대로 스택에 저장된다.&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;span style=&quot;background-color: #99cefa;&quot;&gt;call&lt;/span&gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&amp;lt;stackframe.sub_40100&amp;gt;&amp;nbsp;&lt;/span&gt; = add() 함수 호출&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;lt;40102D&amp;gt;까지 실행했을때 스택 상태&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 195028.jpg&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/95DeB/btrUQcdZQ3n/OQOlyJaSBadneRY4vYhCBK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/95DeB/btrUQcdZQ3n/OQOlyJaSBadneRY4vYhCBK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/95DeB/btrUQcdZQ3n/OQOlyJaSBadneRY4vYhCBK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F95DeB%2FbtrUQcdZQ3n%2FOQOlyJaSBadneRY4vYhCBK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;250&quot; height=&quot;182&quot; data-filename=&quot;화면 캡처 2022-12-28 195028.jpg&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 200100.jpg&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eoSiWk/btrURS7bf6A/hCaE1BuZkStaVKPZquB8rk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eoSiWk/btrURS7bf6A/hCaE1BuZkStaVKPZquB8rk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eoSiWk/btrURS7bf6A/hCaE1BuZkStaVKPZquB8rk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeoSiWk%2FbtrURS7bf6A%2FhCaE1BuZkStaVKPZquB8rk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;74&quot; data-filename=&quot;화면 캡처 2022-12-28 200100.jpg&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;EAX 에 파라미터 b 값인 2가 저장되었고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;ECX에 파라미터 a의 값인 1이 저장 되었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;또한 add() 함수의 복귀 주소인 401041이 스택에 저장된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;● add() 함수 시작 &amp;amp; 스택 프레임 생성&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;stackframe.cpp에서 아래 코드 부분에 해당되는 내용이다.&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;br /&gt;long add(long a, long b)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;{&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;add() 함수가 시작되면 자시만의 스택 프레임을 따로 생성한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 200619.jpg&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;32&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LF2I3/btrURpYrB3U/6JfJ546n2E6SYt2rqoOGIk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LF2I3/btrURpYrB3U/6JfJ546n2E6SYt2rqoOGIk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LF2I3/btrURpYrB3U/6JfJ546n2E6SYt2rqoOGIk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLF2I3%2FbtrURpYrB3U%2F6JfJ546n2E6SYt2rqoOGIk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;757&quot; height=&quot;32&quot; data-filename=&quot;화면 캡처 2022-12-28 200619.jpg&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;32&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;※ 메인 함수와 똑같으므로 설명은 생략하겠다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;401001&amp;gt;까지 실행했을때 스택 상태&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 200840.jpg&quot; data-origin-width=&quot;122&quot; data-origin-height=&quot;32&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsLy6q/btrUM5GHj9k/nkxRWG0ZqTomkvcB718YDk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsLy6q/btrUM5GHj9k/nkxRWG0ZqTomkvcB718YDk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsLy6q/btrUM5GHj9k/nkxRWG0ZqTomkvcB718YDk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsLy6q%2FbtrUM5GHj9k%2FnkxRWG0ZqTomkvcB718YDk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;79&quot; data-filename=&quot;화면 캡처 2022-12-28 200840.jpg&quot; data-origin-width=&quot;122&quot; data-origin-height=&quot;32&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 200909.jpg&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;97&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWl9zq/btrUPZTgZtO/YIV7y77sNywjkH9dfhr7dK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWl9zq/btrUPZTgZtO/YIV7y77sNywjkH9dfhr7dK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWl9zq/btrUPZTgZtO/YIV7y77sNywjkH9dfhr7dK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWl9zq%2FbtrUPZTgZtO%2FYIV7y77sNywjkH9dfhr7dK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;108&quot; data-filename=&quot;화면 캡처 2022-12-28 200909.jpg&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;97&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;원래의 &lt;b&gt;EBP값&lt;/b&gt;(&lt;b&gt;19FF28 = &lt;span style=&quot;color: #ee2323;&quot;&gt;main()의 EBP값&lt;/span&gt;&lt;/b&gt;) 을 &lt;b&gt;스택&lt;/b&gt;에 백업한 후,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;EBP&lt;/b&gt;는 &lt;b&gt;19FF10&lt;/b&gt;으로 &lt;b&gt;새롭게 세팅&lt;/b&gt;된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;● add() 함수의 로컬 변수(x, y) 세팅&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;stackframe.cpp에서 아래 코드 부분에 해당되는 내용이다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;long x =a, y = b;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;add() 함수의 로컬 변수 x, y 에 각각 파라미터 a, b 를 대입한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 210656.jpg&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfri59/btrURQavIWr/YPj2eBkS8FAxoFG3msVkkK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfri59/btrURQavIWr/YPj2eBkS8FAxoFG3msVkkK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfri59/btrURQavIWr/YPj2eBkS8FAxoFG3msVkkK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcfri59%2FbtrURQavIWr%2FYPj2eBkS8FAxoFG3msVkkK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;852&quot; height=&quot;67&quot; data-filename=&quot;화면 캡처 2022-12-28 210656.jpg&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;sub&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;esp&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;8&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;= ESP값에서 8을뺀다&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt; 로컬 변수 x, y 에 대한 스택 메모리영역을 확보&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;b&gt; &amp;lt;401006&amp;gt; ~ &amp;lt;40100F&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 주석 참고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;40100F&amp;gt;까지 실행했을때 스택 상태&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 211048.jpg&quot; data-origin-width=&quot;126&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKrFJR/btrURkpodpa/qAAqsMmOFQCXr01jNWQYJ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKrFJR/btrURkpodpa/qAAqsMmOFQCXr01jNWQYJ1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKrFJR/btrURkpodpa/qAAqsMmOFQCXr01jNWQYJ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKrFJR%2FbtrURkpodpa%2FqAAqsMmOFQCXr01jNWQYJ1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;138&quot; data-filename=&quot;화면 캡처 2022-12-28 211048.jpg&quot; data-origin-width=&quot;126&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 211105.jpg&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;43&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qCPT3/btrUSvDZd1V/0IfG1sb1QULNa9JtsXj6hK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qCPT3/btrUSvDZd1V/0IfG1sb1QULNa9JtsXj6hK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qCPT3/btrUSvDZd1V/0IfG1sb1QULNa9JtsXj6hK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqCPT3%2FbtrUSvDZd1V%2F0IfG1sb1QULNa9JtsXj6hK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;53&quot; data-filename=&quot;화면 캡처 2022-12-28 211105.jpg&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;43&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;●&amp;nbsp; ADD 연산&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;stackframe.cpp에서 아래 코드 부분에 해당되는 내용이다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;return (x + y);&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 211742.jpg&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;27&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9eb7u/btrUL7LPvA3/2ztkBBX0xHyrO7QO5PPGs1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9eb7u/btrUL7LPvA3/2ztkBBX0xHyrO7QO5PPGs1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9eb7u/btrUL7LPvA3/2ztkBBX0xHyrO7QO5PPGs1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9eb7u%2FbtrUL7LPvA3%2F2ztkBBX0xHyrO7QO5PPGs1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;686&quot; height=&quot;27&quot; data-filename=&quot;화면 캡처 2022-12-28 211742.jpg&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;27&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  mov &lt;span style=&quot;color: #409d00;&quot;&gt;eax&lt;/span&gt;, &lt;span style=&quot;color: #006dd7;&quot;&gt;dword ptr&lt;/span&gt; &lt;span style=&quot;color: #ffc1c8;&quot;&gt;ss&lt;/span&gt;:[&lt;span style=&quot;color: #f3c000;&quot;&gt;ebp&lt;/span&gt;-&lt;span style=&quot;color: #a6bc00;&quot;&gt;8&lt;/span&gt;] = 변수 x의값([ebp-8])을 EAX에 넣는다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; add &lt;span style=&quot;color: #409d00;&quot;&gt;eax&lt;/span&gt;, &lt;span style=&quot;color: #006dd7;&quot;&gt;dword ptr&lt;/span&gt; &lt;span style=&quot;color: #ffc1c8;&quot;&gt;ss&lt;/span&gt;:[&lt;span style=&quot;color: #f3c000;&quot;&gt;ebp&lt;/span&gt;-&lt;span style=&quot;color: #a6bc00;&quot;&gt;4&lt;/span&gt;] = EAX에 변수 y의값([ebp-4])을 더한다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;※ EAX는 산술연산 및 리턴 값으로 사용된다.&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;위와 같이 함수가 리턴하기 직전에 EAX에 값을 입력하면 그대로 리턴값이 된다.&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;401015&amp;gt;까지 실행했을때 스택 상태&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 연산 과정에서 스택은 변하지 않았기 때문에 직전의 스택 상태와 동일하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;● add() 함수의 스택 프레임 해제 &amp;amp; 함수 종료(리턴)&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;stackframe.cpp에서 아래 코드 부분에 해당되는 내용이다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;return (x + y);&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이제 add() 함수가 리턴하기위해 add() 함수의 스택 프레임을 해제해야한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 212554.jpg&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;43&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0KgFL/btrUSuZmH6a/Bmr3D3laZoz5HFG02wTLdK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0KgFL/btrUSuZmH6a/Bmr3D3laZoz5HFG02wTLdK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0KgFL/btrUSuZmH6a/Bmr3D3laZoz5HFG02wTLdK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0KgFL%2FbtrUSuZmH6a%2FBmr3D3laZoz5HFG02wTLdK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;687&quot; height=&quot;43&quot; data-filename=&quot;화면 캡처 2022-12-28 212554.jpg&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;43&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  mov &lt;span style=&quot;color: #409d00;&quot;&gt;esp&lt;/span&gt;, &lt;span style=&quot;color: #409d00;&quot;&gt;epb&lt;/span&gt; = 현재 EBP 값을 ESP에 대입&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 앞에서 실행된 401001주소의 mov&lt;span style=&quot;color: #409d00;&quot;&gt; ebp&lt;/span&gt;, &lt;span style=&quot;color: #409d00;&quot;&gt;esp&lt;/span&gt; 에 대응하는 명령어이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;즉 add() 함수가 시작할 때의 ESP(19FF14)값을 EBP에 넣어두었다가 함수가 종료될 때&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;ESP를 원래대로 복원시키는 목적으로 사용한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;b&gt;※위 명령에 의해 401003 주소의 sub esp,8 명령의 효과는 사라진다.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;b&gt;즉 add() 함수의 로컬 변수 x, y 는 더이상 유요하지 않다.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  pop &lt;span style=&quot;color: #409d00;&quot;&gt;ebp&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;= add() 함수가 시작하면서 스택에 백업한 EBP 값 복원&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr; 앞에서 실행된 401000 주소의 push ebp 명령어에 대응하는 명령어이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;복원된 EBP 값은 19FF28 이며, 이값은 main() 함수의 EBP 값이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제 add() 함수의 스택 프레임은 해제 되었다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;background-color: #99cefa;&quot;&gt; ret&lt;/span&gt; = 스택에 저장된 복귀 주소로 리턴한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;401015&amp;gt;까지 실행했을때 스택 상태&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 213815.jpg&quot; data-origin-width=&quot;127&quot; data-origin-height=&quot;32&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ1Lvo/btrUMOL1FzW/KSEplbNhkVJSA3yLtkkxk1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ1Lvo/btrUMOL1FzW/KSEplbNhkVJSA3yLtkkxk1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ1Lvo/btrUMOL1FzW/KSEplbNhkVJSA3yLtkkxk1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ1Lvo%2FbtrUMOL1FzW%2FKSEplbNhkVJSA3yLtkkxk1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;76&quot; data-filename=&quot;화면 캡처 2022-12-28 213815.jpg&quot; data-origin-width=&quot;127&quot; data-origin-height=&quot;32&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;add() 함수를 호출하기 전의 스택 상태로 완벽히 돌아온 것을 알 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;※ 프로그램은 이런식으로 스택을 관라하기 때문에&amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;함수 호출이 계속 중첩되어도 스택이 깨지지 않고 잘 유지되는 것이다.&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;하지만 스택에 로컬 변수, 함수 파라미터, 리턴 주소 등을&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;한번에 보관하기 때문에&amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;문자열 함수 취약점 등을 이용한 Stack Buffer Overflower 기법에 취약하다.&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;● add() 함수 파라미터 제거(스택 정리)&lt;/h4&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이제 main() 함수 코드로 돌아왔다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 233147.jpg&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;17&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqn6fD/btrUNWbMRej/3Rjp8L7DVJ5sYihuBjSKE1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqn6fD/btrUNWbMRej/3Rjp8L7DVJ5sYihuBjSKE1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqn6fD/btrUNWbMRej/3Rjp8L7DVJ5sYihuBjSKE1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcqn6fD%2FbtrUNWbMRej%2F3Rjp8L7DVJ5sYihuBjSKE1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;17&quot; data-filename=&quot;화면 캡처 2022-12-28 233147.jpg&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;17&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  add&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;esp, &lt;span style=&quot;color: #a6bc00;&quot;&gt;8&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;= ESP에 8을 더함&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;add() 함수가 완전히 종료되었기 때문에 add() 함수에 넘겨주었던&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파라미터 a, b 는 더이상 필요 없기때문에&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ESP 에 8을 더하여 스택을 정리하는 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;401041&amp;gt;까지 실행했을때 스택 상태&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 233222.jpg&quot; data-origin-width=&quot;117&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9lV80/btrULOFzki2/PCpXZTInMtZe7KbHDmSJf1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9lV80/btrULOFzki2/PCpXZTInMtZe7KbHDmSJf1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9lV80/btrULOFzki2/PCpXZTInMtZe7KbHDmSJf1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9lV80%2FbtrULOFzki2%2FPCpXZTInMtZe7KbHDmSJf1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;72&quot; data-filename=&quot;화면 캡처 2022-12-28 233222.jpg&quot; data-origin-width=&quot;117&quot; data-origin-height=&quot;28&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● printf() 함수 호출&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;stackfaame.cpp에서 아래 코드 부분에 해당되는 내용이다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;printf(&quot;%d\n&quot;, add(a, b));&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;printf() 함수의 호출 코드이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 233901.jpg&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb6AcL/btrUMJcVGZ7/ik8LozUaZxM30VLawKJgm0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb6AcL/btrUMJcVGZ7/ik8LozUaZxM30VLawKJgm0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb6AcL/btrUMJcVGZ7/ik8LozUaZxM30VLawKJgm0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb6AcL%2FbtrUMJcVGZ7%2Fik8LozUaZxM30VLawKJgm0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;801&quot; height=&quot;57&quot; data-filename=&quot;화면 캡처 2022-12-28 233901.jpg&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  push&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;eax&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;= add() 함수에 저장된 리턴값(3)이 들어있다.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  &lt;span style=&quot;background-color: #99cefa;&quot;&gt;call&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt; &amp;lt;stackframe.sub_401067&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;= printf() 함수 호출&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  add&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;esp,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;8&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;= ESP에 8을 더함&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rarr;&amp;nbsp;&lt;/b&gt;printf() 함수의 파라미터는 2개이며 크기는 8바이트이다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 40104F 주소에 add esp, 8 명령어로 스택에서 함수 파라미터를 정리하고있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;401041&amp;gt;까지 실행했을때 스택 상태&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;printf() 함수 호출후 스택이 정리되었기 때문에 스택언 전과 동일하다.&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;u&gt;● 리턴 값 세팅&lt;/u&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;stackframe.cpp에서 아래 코드 부분에 해당되는 내용이다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;return 0;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;main() 함수의 리턴값(0) 을 세팅한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 234832.jpg&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;15&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJYFZp/btrUMIrA6gb/xm6zCkDroNRjkkMOccEeC0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJYFZp/btrUMIrA6gb/xm6zCkDroNRjkkMOccEeC0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJYFZp/btrUMIrA6gb/xm6zCkDroNRjkkMOccEeC0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJYFZp%2FbtrUMIrA6gb%2Fxm6zCkDroNRjkkMOccEeC0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;15&quot; data-filename=&quot;화면 캡처 2022-12-28 234832.jpg&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;15&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  xor&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;eax, eax&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;= Exlusive OR bit 연산 실행&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;같은 값끼리 XOR하면 0이 되는 특징이 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mov eax, 0&amp;nbsp; 명령어보다 실행 속도가 빨라서 위와같이 레지스터 초기화시킬때 많이 사용된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;● 스택 프레임 해제 &amp;amp; main() 함수 종료&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;stackframe.cpp 에서 아래 코드 부분에 해당되는 내용이다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;return 0;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;main() 함수가 종료된다. add() 함수와 마찬가지로 리턴하기 전에 스택프레임을 해제한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 235352.jpg&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gbt8L/btrUPZy5TCD/sMkFxOBxmb9khyIjfwkjL1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gbt8L/btrUPZy5TCD/sMkFxOBxmb9khyIjfwkjL1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gbt8L/btrUPZy5TCD/sMkFxOBxmb9khyIjfwkjL1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGbt8L%2FbtrUPZy5TCD%2FsMkFxOBxmb9khyIjfwkjL1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;687&quot; height=&quot;28&quot; data-filename=&quot;화면 캡처 2022-12-28 235352.jpg&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;28&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;위 두명령으로 main() 함수의 스택 프레임은 해제 되었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;또한 main() 함수의 로컬 변수인 a, b역시 더이상 유효하지 않다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;401056&amp;gt;까지 실행했을때 스택 상태&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 235427.jpg&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;37&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca7e3p/btrUNriPwKW/wfiKJ5INKwwuFjHlRAuon1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca7e3p/btrUNriPwKW/wfiKJ5INKwwuFjHlRAuon1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca7e3p/btrUNriPwKW/wfiKJ5INKwwuFjHlRAuon1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca7e3p%2FbtrUNriPwKW%2FwfiKJ5INKwwuFjHlRAuon1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;93&quot; data-filename=&quot;화면 캡처 2022-12-28 235427.jpg&quot; data-origin-width=&quot;120&quot; data-origin-height=&quot;37&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;main() 함수를 시작할때의 스택 모습과 완벽히 동일하다.&lt;/p&gt;</description>
      <category>Reverse Engineernig/study</category>
      <author>po3nyo</author>
      <guid isPermaLink="true">https://po3nyo.tistory.com/215</guid>
      <comments>https://po3nyo.tistory.com/215#entry215comment</comments>
      <pubDate>Wed, 28 Dec 2022 21:41:45 +0900</pubDate>
    </item>
    <item>
      <title>[리버싱 핵심원리] ch06. abex' crackeme #1 분석</title>
      <link>https://po3nyo.tistory.com/214</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 프로그램 확인&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;abex' crackme1-voiees.exe ( 실습파일에는 voiees.exex 라고 되있을건데 확장자를 exe로 변경후 실습)&lt;/li&gt;
&lt;li&gt;어셈블리 언어로 작성된코드이다. &amp;gt; stub code 추가되어 있지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 103416.jpg&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAFKg0/btrUL8JUIKC/hkh3jgk6C826sreKLCOet0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAFKg0/btrUL8JUIKC/hkh3jgk6C826sreKLCOet0/img.jpg&quot; data-alt=&quot;abex' crackme1-voiees.exe 실행시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAFKg0/btrUL8JUIKC/hkh3jgk6C826sreKLCOet0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAFKg0%2FbtrUL8JUIKC%2Fhkh3jgk6C826sreKLCOet0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;162&quot; data-filename=&quot;화면 캡처 2022-12-28 103416.jpg&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;abex' crackme1-voiees.exe 실행시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 103430.jpg&quot; data-origin-width=&quot;275&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xQHnP/btrUP0RrybA/oGltUK33ICbefKLxV9BUdk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xQHnP/btrUP0RrybA/oGltUK33ICbefKLxV9BUdk/img.jpg&quot; data-alt=&quot;확인 눌렀을때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xQHnP/btrUP0RrybA/oGltUK33ICbefKLxV9BUdk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxQHnP%2FbtrUP0RrybA%2FoGltUK33ICbefKLxV9BUdk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;275&quot; height=&quot;157&quot; data-filename=&quot;화면 캡처 2022-12-28 103430.jpg&quot; data-origin-width=&quot;275&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;확인 눌렀을때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 디버깅&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 104734.jpg&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ubGVm/btrUL8cbELe/eIzETcvK0yak2oeNe5oVSk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ubGVm/btrUL8cbELe/eIzETcvK0yak2oeNe5oVSk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ubGVm/btrUL8cbELe/eIzETcvK0yak2oeNe5oVSk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FubGVm%2FbtrUL8cbELe%2FeIzETcvK0yak2oeNe5oVSk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;368&quot; data-filename=&quot;화면 캡처 2022-12-28 104734.jpg&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;530&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;abex' crackme1-voiees.exe 파일을 디버거에 올렸을때 나오는 첫 화면이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;우리의 목표는 Ok, I really think ... 라는 문구를 출력하는 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;코드가 짧고 배우는 초기단계 이므로 하나씩 실행해 보며 코드를 파악해 볼 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 104842.jpg&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HYHA3/btrUKm9wm51/tmxxMLmBtBTdj4bnvRInt1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HYHA3/btrUKm9wm51/tmxxMLmBtBTdj4bnvRInt1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HYHA3/btrUKm9wm51/tmxxMLmBtBTdj4bnvRInt1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHYHA3%2FbtrUKm9wm51%2FtmxxMLmBtBTdj4bnvRInt1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;384&quot; data-filename=&quot;화면 캡처 2022-12-28 104842.jpg&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;40100E 주소의 call 함수를 실행하자 프로그램을 처음 실행했을때 뜨는 창을 만났다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;확인을 누른후 계속 실행해보자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 105016.jpg&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3rzcs/btrUIngL40s/aXZFrF2phsZ50yzHAbukXk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3rzcs/btrUIngL40s/aXZFrF2phsZ50yzHAbukXk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3rzcs/btrUIngL40s/aXZFrF2phsZ50yzHAbukXk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3rzcs%2FbtrUIngL40s%2FaXZFrF2phsZ50yzHAbukXk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;367&quot; data-filename=&quot;화면 캡처 2022-12-28 105016.jpg&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;에러 메시지 출력까지 왔다. 다음 명령어가 &amp;lt;401050&amp;gt;으로 jmp 하는거고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;401050&amp;gt;주소의 함수는 프로세스를 종료시키는 함수인걸 알 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;40103D&amp;gt; 주소로 가야 우리가 원하는 메시지박스를 출력할 수 있는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;어떻게 해야할까?&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 우리가 주목해야할 부분은 바로 여기이다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 104932.jpg&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGmXKn/btrUIgPwM3T/SAlHNiDyjONzLH5UXYrWqk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGmXKn/btrUIgPwM3T/SAlHNiDyjONzLH5UXYrWqk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGmXKn/btrUIgPwM3T/SAlHNiDyjONzLH5UXYrWqk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGmXKn%2FbtrUIgPwM3T%2FSAlHNiDyjONzLH5UXYrWqk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;122&quot; data-filename=&quot;화면 캡처 2022-12-28 104932.jpg&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;je&lt;/b&gt; 는 &lt;b&gt;조건분기문&lt;/b&gt;인데 조건이 성립하면&lt;b&gt; jmp 명령어를 실행&lt;/b&gt;한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 대부분 je명령어 바로 앞쪽을 보면 &lt;b&gt;cmp 명령어로 조건을 지정하는 부분&lt;/b&gt;이 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;자 이제 확인해보면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;cmp&lt;/b&gt; 문으로 &lt;b&gt;eax&lt;/b&gt; 값과 &lt;b&gt;esi&lt;/b&gt; 값을 비교하고있는데 레지스트리 창을 확인해보면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;값이 다른걸 알 수있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;조건에 부합하기때문에&lt;b&gt; jmp&lt;/b&gt;명령어가 실행되지않고 다음명령어로 내려가게되어&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Error 메시지가 출력되는곳으로 이동하는것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 111645.jpg&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Pfthc/btrUIZ7RXxV/vMWdcq4rQ6a8PdoOPDTGbK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Pfthc/btrUIZ7RXxV/vMWdcq4rQ6a8PdoOPDTGbK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Pfthc/btrUIZ7RXxV/vMWdcq4rQ6a8PdoOPDTGbK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPfthc%2FbtrUIZ7RXxV%2FvMWdcq4rQ6a8PdoOPDTGbK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1018&quot; height=&quot;82&quot; data-filename=&quot;화면 캡처 2022-12-28 111645.jpg&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그럼 이제 jmp 명령어를 실행시킬 방법을 알아보자&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;cmp 명령어 수정&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 112422.jpg&quot; data-origin-width=&quot;1218&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pJ6cy/btrUQbMfsLI/IEF1zrsKVJLEfukINOKz41/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pJ6cy/btrUQbMfsLI/IEF1zrsKVJLEfukINOKz41/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pJ6cy/btrUQbMfsLI/IEF1zrsKVJLEfukINOKz41/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpJ6cy%2FbtrUQbMfsLI%2FIEF1zrsKVJLEfukINOKz41%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1218&quot; height=&quot;212&quot; data-filename=&quot;화면 캡처 2022-12-28 112422.jpg&quot; data-origin-width=&quot;1218&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;eax&lt;/b&gt; 값과 &lt;b&gt;eax&lt;/b&gt; 값을 비교하게 하면 당연히 똑같은 값을 비교하는것이므로&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;참인 결과가 나와&lt;b&gt; jmp명령어를 실행&lt;/b&gt;하게 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;je명령어 수정&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 112638.jpg&quot; data-origin-width=&quot;1186&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJavu1/btrUMQI49np/kpjpMULLqNMKOL9WJv4K51/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJavu1/btrUMQI49np/kpjpMULLqNMKOL9WJv4K51/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJavu1/btrUMQI49np/kpjpMULLqNMKOL9WJv4K51/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJavu1%2FbtrUMQI49np%2FkpjpMULLqNMKOL9WJv4K51%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1186&quot; height=&quot;172&quot; data-filename=&quot;화면 캡처 2022-12-28 112638.jpg&quot; data-origin-width=&quot;1186&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;조건분기문인&lt;b&gt; je&lt;/b&gt; 를 그냥 분기문인&lt;b&gt; jmp&lt;/b&gt; 로 수정하면 조건에 상관없이&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;40103D 주소로&lt;b&gt; jmp&lt;/b&gt; 하게 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ZF(Zero Flag) 값 수정&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 114407.jpg&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7nZzB/btrUL8pMBPt/HJZcio5ItOPnpk5ZkqWmbK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7nZzB/btrUL8pMBPt/HJZcio5ItOPnpk5ZkqWmbK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7nZzB/btrUL8pMBPt/HJZcio5ItOPnpk5ZkqWmbK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7nZzB%2FbtrUL8pMBPt%2FHJZcio5ItOPnpk5ZkqWmbK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;104&quot; data-filename=&quot;화면 캡처 2022-12-28 114407.jpg&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;je&lt;/b&gt; 명령어를 실행전에&lt;b&gt; ZF(Zero Flag)&lt;/b&gt; 연산결과를&lt;b&gt; 1(참)&lt;/b&gt; 로 수정하면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;조건에 부합하여 40103D 주소로&lt;b&gt; jmp&lt;/b&gt; 하게 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;위 방법들을 사용해 실행하면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-28 115022.jpg&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oo0TL/btrUKYHDM9t/2MSzqlA2CFjZJwEe30aoAK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oo0TL/btrUKYHDM9t/2MSzqlA2CFjZJwEe30aoAK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oo0TL/btrUKYHDM9t/2MSzqlA2CFjZJwEe30aoAK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foo0TL%2FbtrUKYHDM9t%2F2MSzqlA2CFjZJwEe30aoAK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;163&quot; data-filename=&quot;화면 캡처 2022-12-28 115022.jpg&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;우리가 목표로 하는 메시지박스를 실행할 수 있다.!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Reverse Engineernig/study</category>
      <author>po3nyo</author>
      <guid isPermaLink="true">https://po3nyo.tistory.com/214</guid>
      <comments>https://po3nyo.tistory.com/214#entry214comment</comments>
      <pubDate>Wed, 28 Dec 2022 11:51:27 +0900</pubDate>
    </item>
    <item>
      <title>[리버싱 핵심원리] ch05. 스택</title>
      <link>https://po3nyo.tistory.com/213</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 스택&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 프로세스에서 스택 메모리의 역할&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수 내의 로컬 변수 임시 저장&lt;/li&gt;
&lt;li&gt;함수 호출 시 파라미터 전달&lt;/li&gt;
&lt;li&gt;복귀 주소(address) 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- FILO (&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;F&lt;/b&gt;&lt;/span&gt;irst&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;I&lt;/b&gt;&lt;/span&gt;n&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;L&lt;/b&gt;&lt;/span&gt;ast&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;O&lt;/b&gt;&lt;/span&gt;ut) 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 스택의 특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로세스에서 스택 포인터(ESP)의 초기값은 Stack Botton 에 가깝다&lt;/li&gt;
&lt;li&gt;PUSH (위) / POP (아래) 명령에 따라 스택포인터가 이동한다.&lt;/li&gt;
&lt;li&gt;데이터는 높은 주소부터 먼저 쌓여간다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-27 140918.jpg&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vxX6f/btrUL7wCu9U/F1IoSVAPfJUS6vvOdftgyK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vxX6f/btrUL7wCu9U/F1IoSVAPfJUS6vvOdftgyK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vxX6f/btrUL7wCu9U/F1IoSVAPfJUS6vvOdftgyK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvxX6f%2FbtrUL7wCu9U%2FF1IoSVAPfJUS6vvOdftgyK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;513&quot; height=&quot;376&quot; data-filename=&quot;화면 캡처 2022-12-27 140918.jpg&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;376&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Reverse Engineernig/study</category>
      <author>po3nyo</author>
      <guid isPermaLink="true">https://po3nyo.tistory.com/213</guid>
      <comments>https://po3nyo.tistory.com/213#entry213comment</comments>
      <pubDate>Tue, 27 Dec 2022 14:16:19 +0900</pubDate>
    </item>
    <item>
      <title>[리버싱 핵심원리] ch04. IA-32 Register 기본 설명</title>
      <link>https://po3nyo.tistory.com/212</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. CPU 레지스터란 ?&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CPU 내부에 존재하는 다목적 저장 공간&lt;/li&gt;
&lt;li&gt;CPU 내부에 존재하므로, RAM에 비해 데이터의 고속 처리가 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. IA - 32의 레지스터&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;media-1073599-assembly-language-for-ia-32-fig1.jpg&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mSr1y/btrUCjk14nq/GguWOV1FgN7GrjwZh7VnQk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mSr1y/btrUCjk14nq/GguWOV1FgN7GrjwZh7VnQk/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mSr1y/btrUCjk14nq/GguWOV1FgN7GrjwZh7VnQk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmSr1y%2FbtrUCjk14nq%2FGguWOV1FgN7GrjwZh7VnQk%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;455&quot; data-filename=&quot;media-1073599-assembly-language-for-ia-32-fig1.jpg&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;455&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IA -32는 지원하는 기능도 무척 많은 만큼 레지스터의 수도 많다. 위 그림에 나온 레지스터들 외 에도 다양한 레지스터가 존재한다.&amp;nbsp; 애플리케이션 디버깅의 초급단계에서는 Basic program execution register에 대해 알아 보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.1 Basic program execution register&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; Basic program execution register 은 크게 4개의 그룹으로 구성된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;General Purpose Registers / &lt;b&gt;범용레지스터&lt;/b&gt; (32비트, 8개)&lt;/li&gt;
&lt;li&gt;Segement Registers / &lt;b&gt;세그먼트레지스터&lt;/b&gt; (16비트, 6개)&lt;/li&gt;
&lt;li&gt;Program Status and Control Registers / &lt;b&gt;프로그램 상태와 컨트롤 레지스터&lt;/b&gt; (32비트, 1개)&lt;/li&gt;
&lt;li&gt;Instruction Pointer / &lt;b&gt;명령어 포인터 &lt;/b&gt;(32비트, 1개)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.1.1 General Purpose Register ( 범용 레지스터) / 32비트 8개&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;산술 연산(ADD, SUB, XOR, OR등) 명령어에서 상수/ 변수 값의 저장용도로 사용 (EAX, EBX, ECX, EDX)&lt;/li&gt;
&lt;li&gt;메모리 주소를 저장하는 포인터로 사용 (EBP, ESI, EDI, ESP)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;general_purpose_register_16_32_bit.jpg&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UHLby/btrUDisQMGY/9wN0XtPPvAI2Rnz3aSGRg1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UHLby/btrUDisQMGY/9wN0XtPPvAI2Rnz3aSGRg1/img.jpg&quot; data-alt=&quot;범용 레지스터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UHLby/btrUDisQMGY/9wN0XtPPvAI2Rnz3aSGRg1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUHLby%2FbtrUDisQMGY%2F9wN0XtPPvAI2Rnz3aSGRg1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;422&quot; height=&quot;241&quot; data-filename=&quot;general_purpose_register_16_32_bit.jpg&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;범용 레지스터&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;EAX&lt;/b&gt; :&amp;nbsp; Accumulator for operands and result data&amp;nbsp; &amp;rarr; &lt;b&gt;일반적으로 함수 리턴값&lt;/b&gt;에 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;EBX&lt;/b&gt; :&amp;nbsp; Pointer to data in the DS segment &amp;rarr; &lt;b&gt;메모리 주소&lt;/b&gt; 저장&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ECX&lt;/b&gt; : Counter for String and loop operations &amp;rarr; &lt;b&gt;반복문 명령어&lt;/b&gt;에서 &lt;b&gt;반복 카운터&lt;/b&gt;로 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;EDX&lt;/b&gt; : I/O Pointer &amp;rarr; EAX와 함께 연동해서 사용하며, &lt;b&gt;큰수의 복잡한 연산과 부호 확장 명령&lt;/b&gt;에 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;EBP&lt;/b&gt; : Pointer do data on the stack &amp;rarr; &lt;b&gt;함수가 호출&lt;/b&gt;되었을때,&lt;b&gt; ESP를 저장&lt;/b&gt;하고 있다가, &lt;b&gt;함수 리턴 직전&lt;/b&gt;에 &lt;b&gt;ESP에 값을 되돌려줌&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ESI&lt;/b&gt; : source pointer for string operations &amp;rarr; 데이터를 조작하거나 복사할때 &lt;b&gt;데이터의 주소저장&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;EDI&lt;/b&gt; : Destination pointer for string operations &amp;rarr; 데이터를 복사할 때 &lt;b&gt;목적지의 주소 저장&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ESP&lt;/b&gt; : Stack Pointer &amp;rarr; &lt;b&gt;스택 메모리 주소&lt;/b&gt; push,pop 에 따라&lt;b&gt; 4byte씩 값이 변함&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.1.2 Segement Register (세그먼트 레지스터) / 16비트, 6개&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세그먼트라는 메모리의 한 영역에 대한 주소를 지정한다.&lt;/li&gt;
&lt;li&gt;세그먼트 : 프로그램에 정의된 코드, 데이터등을 저장하는 특정 영역&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;44966492-7775a300-af76-11e8-9ab6-c0508eaef6d7.png&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;595&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYixex/btrUHRH1ArB/WBz2iDxcP8twFvJGRJgbpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYixex/btrUHRH1ArB/WBz2iDxcP8twFvJGRJgbpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYixex/btrUHRH1ArB/WBz2iDxcP8twFvJGRJgbpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYixex%2FbtrUHRH1ArB%2FWBz2iDxcP8twFvJGRJgbpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;457&quot; data-filename=&quot;44966492-7775a300-af76-11e8-9ab6-c0508eaef6d7.png&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;595&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CS&lt;/b&gt;(Code Segement) : 실행될 기계 명령어를 포함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SS&lt;/b&gt;(Stack Segement) :&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DS&lt;/b&gt;(Data Segement) : 프로그램에서 정의된 데이터, 상수, 작업영역을 포함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ES&lt;/b&gt;(Extra Segement): 추가적인 데이터 세그먼트 &amp;rarr; 메모리 주소 주정을 다루는 스트링(문자열 연산)에 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FS&lt;/b&gt;(Data Segement): 추가적인 데이터 세그먼트 &amp;rarr; SEH,PEB 등의 주소를 계산할 때 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GS&lt;/b&gt;(Data Segement) : 추가적인 데이터 세그먼트&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.1.3 Program Status and Control Registers ( 프로그램 상태와 컨트롤 레지스터) / 32비트, 1개&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EFLAGS(Flag Register) &amp;gt; FLAGS 레지스터의 확장형, 1(on/ true); 0(off/false)&lt;/li&gt;
&lt;li&gt;ZF(Zero Flag) : 연산 결과값이 0이면 ZF=1로 설정&lt;/li&gt;
&lt;li&gt;OF(Overflow Flag) : 부호 있는 수 (signed integer)의 오버플로가 발생하면 1로 설정, MSB 변경시 1로 설정&lt;/li&gt;
&lt;li&gt;CF(Carry Flag) : 부호 없는 수 (unsinged inteager)의 오버플로가 발생하면 1로 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;44966754-020ad200-af78-11e8-861a-cd2859ee8516.png&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvyeY4/btrUI0ds6LR/GKX69GGEEzfhVM8ZRRewKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvyeY4/btrUI0ds6LR/GKX69GGEEzfhVM8ZRRewKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvyeY4/btrUI0ds6LR/GKX69GGEEzfhVM8ZRRewKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvyeY4%2FbtrUI0ds6LR%2FGKX69GGEEzfhVM8ZRRewKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;410&quot; data-filename=&quot;44966754-020ad200-af78-11e8-861a-cd2859ee8516.png&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;499&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.1.4 Instruction Pointer ( 명령어 포인터) / 32비트, 1개&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CPU 가 처리할 명령의 주소를 나타낸다.&lt;/li&gt;
&lt;li&gt;16비트 IP레지스터의 확장형태&lt;/li&gt;
&lt;li&gt;CPU는 EIP/IP에 저장되어 있는 주소의 명령을 수행한 후, 명령어 길이만큼 EIP/IP 값을 증가시킨다.&lt;/li&gt;
&lt;li&gt;EIP/IP 의 값을 사용자가 직접 수정할 수는 없다.&amp;nbsp; &amp;rarr; 다른 명령어를 사용하여 간접적으로 변경&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Reverse Engineernig/study</category>
      <author>po3nyo</author>
      <guid isPermaLink="true">https://po3nyo.tistory.com/212</guid>
      <comments>https://po3nyo.tistory.com/212#entry212comment</comments>
      <pubDate>Tue, 27 Dec 2022 13:07:36 +0900</pubDate>
    </item>
    <item>
      <title>[리버싱 핵심원리] ch03. 리틀 엔디언 표기법</title>
      <link>https://po3nyo.tistory.com/211</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 바이트 오더링&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;바이트 오더링( Byte Ordering) 이란 데이터가 저장되는 방식(순서)를 의미한다.&lt;/li&gt;
&lt;li&gt;바이트 오더링 방식에는 크게 빅 엔디언(Big Endian) &amp;amp; 리틀 엔디언(Little Endian) 이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1 빅 엔디언(Big Endian)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빅 엔디언 방식은 데이터를 저장할 때 사람이 보는 방식과 동일하게 순차적으로 저장된다.&lt;/li&gt;
&lt;li&gt;비교 연산시 높은 비트열을 먼저 비교하므로 유리하다.&lt;/li&gt;
&lt;li&gt;연산속도가 리틀 엔디언 방식에 비해 느리다는 단점이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2 리틀 엔디언(Little Endian)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리틀 엔디언 방식은 데이터를 저장할 때 역순으로 저장된다.&lt;/li&gt;
&lt;li&gt;낮은 비트열이 먼저 들어와서 연산이 바로 가능하다.&lt;/li&gt;
&lt;li&gt;비교 연산을 할 때는 빅 엔디언에 비해 불리하다는 단점이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 190702.jpg&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yRpHq/btrUGIYrH5T/iaFK1tpCyblwz8GU17FUGK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yRpHq/btrUGIYrH5T/iaFK1tpCyblwz8GU17FUGK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yRpHq/btrUGIYrH5T/iaFK1tpCyblwz8GU17FUGK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyRpHq%2FbtrUGIYrH5T%2FiaFK1tpCyblwz8GU17FUGK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;148&quot; data-filename=&quot;화면 캡처 2022-12-26 190702.jpg&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 위 사진과 같이 총 4개의 크기가 다른 자료형이 있을때 바이트 타입의 변수를 저장할 때는 두 방식의 차이가 없지만, 2바이트 이상의 크기를 가진 자료형을 저장할 때에는 각 엔디언의 방식에 따라 저장방식에 차이가 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 디버거에서 리틀 엔디언 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;실습파일 내 LittleEndian.exe 소스코드&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1672051432689&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//LittleEdnian.cpp

#include &quot;windows.h&quot;

BYTE    b       =   0x12;
WORD    w       =   0x1234;
DWORD   dw      =   0x12345678;
char    str[]   =   &quot;abcde&quot;;

int main(int argc, char *argv[])
{
    BYTE    lb  =   b;
    WORD    lw  =   w;
    DWORD   ldw =   dw;
    char    *lstr  =   str;

    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디버거로 실행했을때&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 193806.jpg&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lIAfe/btrUCieQw7n/Txm5WKeztk835V0b6OLJEk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lIAfe/btrUCieQw7n/Txm5WKeztk835V0b6OLJEk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lIAfe/btrUCieQw7n/Txm5WKeztk835V0b6OLJEk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlIAfe%2FbtrUCieQw7n%2FTxm5WKeztk835V0b6OLJEk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;181&quot; data-filename=&quot;화면 캡처 2022-12-26 193806.jpg&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;40AC40 주소의 Dump Window&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 193822.jpg&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMKtVD/btrUGHZxKLO/gI2cdu6GzpdAizcNahCKK1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMKtVD/btrUGHZxKLO/gI2cdu6GzpdAizcNahCKK1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMKtVD/btrUGHZxKLO/gI2cdu6GzpdAizcNahCKK1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMKtVD%2FbtrUGHZxKLO%2FgI2cdu6GzpdAizcNahCKK1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;43&quot; data-filename=&quot;화면 캡처 2022-12-26 193822.jpg&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[40AC40] 주소에 12(byte)가 12 가 저장되있고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[40AC44] 주소에 1234(word)가 [34 12] 로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[40AC48] 주소에 12345678(dword)이 [78 56 34 12] 과 같이 리틀 엔디언 방식으로 저장되 있는것을 확인할 수 있다.&lt;/p&gt;</description>
      <category>Reverse Engineernig/study</category>
      <author>po3nyo</author>
      <guid isPermaLink="true">https://po3nyo.tistory.com/211</guid>
      <comments>https://po3nyo.tistory.com/211#entry211comment</comments>
      <pubDate>Mon, 26 Dec 2022 19:51:12 +0900</pubDate>
    </item>
    <item>
      <title>[리버싱 핵심원리] ch02. Hello World! 리버싱</title>
      <link>https://po3nyo.tistory.com/210</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt; 리버싱 핵심원리 소스코드/실습예제 파일다운 &amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://reversecore.com/104&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://reversecore.com/104&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672032255312&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;&amp;quot;리버싱 핵심 원리&amp;quot; 소스 코드와 실습 예제 파일입니다.&quot; data-og-description=&quot;(2021.07.08) github.com 에도 제 계정을 생성하여 소스코드 및 실습예제를 올렸습니다. github 에 익숙하신 분들께서는 이곳을 이용하시면 됩니다. https://github.com/reversecore/book 1. 소스 코드 (ver 1.0.2) * 암&quot; data-og-host=&quot;reversecore.com&quot; data-og-source-url=&quot;https://reversecore.com/104&quot; data-og-url=&quot;https://reversecore.com/104&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/evAzlS/hyQ1k7EtcW/irvfmQjS2NxwTKaJWCqiq1/img.png?width=800&amp;amp;height=654&amp;amp;face=0_0_800_654,https://scrap.kakaocdn.net/dn/d1inew/hyQ34hMF2j/VeKVDwmVX7Hbu4pFtpslZk/img.png?width=800&amp;amp;height=654&amp;amp;face=0_0_800_654,https://scrap.kakaocdn.net/dn/bPqtbZ/hyQ1skjCZV/Uh5WUkDDxuB8KW2IzMMW40/img.png?width=750&amp;amp;height=734&amp;amp;face=0_0_750_734&quot;&gt;&lt;a href=&quot;https://reversecore.com/104&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://reversecore.com/104&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/evAzlS/hyQ1k7EtcW/irvfmQjS2NxwTKaJWCqiq1/img.png?width=800&amp;amp;height=654&amp;amp;face=0_0_800_654,https://scrap.kakaocdn.net/dn/d1inew/hyQ34hMF2j/VeKVDwmVX7Hbu4pFtpslZk/img.png?width=800&amp;amp;height=654&amp;amp;face=0_0_800_654,https://scrap.kakaocdn.net/dn/bPqtbZ/hyQ1skjCZV/Uh5WUkDDxuB8KW2IzMMW40/img.png?width=750&amp;amp;height=734&amp;amp;face=0_0_750_734');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;&quot;리버싱 핵심 원리&quot; 소스 코드와 실습 예제 파일입니다.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;(2021.07.08) github.com 에도 제 계정을 생성하여 소스코드 및 실습예제를 올렸습니다. github 에 익숙하신 분들께서는 이곳을 이용하시면 됩니다. https://github.com/reversecore/book 1. 소스 코드 (ver 1.0.2) * 암&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;reversecore.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. Hello World 프로그램&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Release 모드로 HelloWorld.exe 를 만들어 보자( Release 모드로 컴파일하면 코드가 간결해져 디버깅하기 편하다)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1672032801023&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//HelloWorld.cpp

#include &quot;windows.h&quot;
#include &quot;tchar.h&quot;

int _tmain(int argc, TCHAR *argv[])
{
	MessageBox(NULL, 
			   L&quot;Hello World!&quot;, 
			   L&quot;www.reversecore.com&quot;, 
			   MB_OK);
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 142849.jpg&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctD7ph/btrUHOwSWT3/YwZua4oTbx8Wk7MWsr7R90/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctD7ph/btrUHOwSWT3/YwZua4oTbx8Wk7MWsr7R90/img.jpg&quot; data-alt=&quot;HelloWorld!.exe 실행화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctD7ph/btrUHOwSWT3/YwZua4oTbx8Wk7MWsr7R90/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctD7ph%2FbtrUHOwSWT3%2FYwZua4oTbx8Wk7MWsr7R90%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;330&quot; data-filename=&quot;화면 캡처 2022-12-26 142849.jpg&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HelloWorld!.exe 실행화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. HelloWorld.exe 디버깅&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;nbsp;2.1 Hello world 디버깅 목표&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어셈블리 언어로 변환된 main() 함수 찾기&lt;/li&gt;
&lt;li&gt;기본적인 디버거 사용법 학습&lt;/li&gt;
&lt;li&gt;어셈블리 명령어 학습&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.2 HelloWorld.exe. 디버깅 시작&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;제목 없음.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1027&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcmXTI/btrUyiGnwLM/RKBrEabHXJUn8uwWszqaek/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcmXTI/btrUyiGnwLM/RKBrEabHXJUn8uwWszqaek/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcmXTI/btrUyiGnwLM/RKBrEabHXJUn8uwWszqaek/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcmXTI%2FbtrUyiGnwLM%2FRKBrEabHXJUn8uwWszqaek%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;428&quot; data-filename=&quot;제목 없음.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1027&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1) Code Window&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본적으로 diassembly Code 를 표시한다.&lt;/li&gt;
&lt;li&gt;각종 comment, label 을 보여준다.&lt;/li&gt;
&lt;li&gt;코드를 분석하여 loop, jump, 위치등의 정보를 표시한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(2) Register Window&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CPU Register 값을 실시간으로 표시한다.&lt;/li&gt;
&lt;li&gt;특정 Register의 값은 수정도 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(3) Dump Window&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로세스에서 원하는 memory 주소 위치의 값을 hex와 asscii/유니코드 값으로 표시한다.&lt;/li&gt;
&lt;li&gt;수정가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(4) Stack Window&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ESP Register가 가리키는 프로세스 Stack Memory를 실시간으로 표시한다.&lt;/li&gt;
&lt;li&gt;수정가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.3 EP (Entry Point)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;엔트리 포인트(Entry Point)는 제어가 운영 체제에서 컴퓨터 프로그램으로 이동하는것을 말하며, 프로세서는 프로그램이나 EP가 코드에 진입해서 실행을 시작한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;PE 파일을 분석해서 EP값을 알아 낼 수도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 150735.jpg&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UFpuV/btrUHNx3eh6/hTfsCdBe6fjSSJLCMuCxg0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UFpuV/btrUHNx3eh6/hTfsCdBe6fjSSJLCMuCxg0/img.jpg&quot; data-alt=&quot;exe 파일을 디버거에 올렸을때 첫 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UFpuV/btrUHNx3eh6/hTfsCdBe6fjSSJLCMuCxg0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUFpuV%2FbtrUHNx3eh6%2FhTfsCdBe6fjSSJLCMuCxg0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;291&quot; data-filename=&quot;화면 캡처 2022-12-26 150735.jpg&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;311&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;exe 파일을 디버거에 올렸을때 첫 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;gt; 위 사진과 같이 Hello World.exe를 디버거로 열었을때 EP(Entry Piont)에서 멈추는걸 알수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(1) address&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로세스의 가상 메모리 (Virtual Address:VA) 내의 주소&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(2) instruction&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IA-32(또는 x86) CPU 명령어&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(3) Disassembled Code&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OP 코드를 보기 쉽게 어셈블리어로 변환한 코드&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(4) Comment&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디버거에서 추가한 주석 ( 옵션에 따라 약간 다르게 보임)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 4 40270C 함수 따라가기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 이제 Main() 함수를 찾기위해 Step into 명령어 [F7] 를 사용해 40270C 함수 코드 내부로 들어가보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 154112.jpg&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckqNnA/btrUIfA9XlQ/k6xxToT6qKiahOOnDvuJL1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckqNnA/btrUIfA9XlQ/k6xxToT6qKiahOOnDvuJL1/img.jpg&quot; data-alt=&quot;40270C 함수 내부&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckqNnA/btrUIfA9XlQ/k6xxToT6qKiahOOnDvuJL1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckqNnA%2FbtrUIfA9XlQ%2Fk6xxToT6qKiahOOnDvuJL1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;359&quot; data-filename=&quot;화면 캡처 2022-12-26 154112.jpg&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;40270C 함수 내부&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 내부로 들어오자 새로운 코드들이 나타난다. 먼저 주석에서는 코드에서 호출되는 API 함수이름을 보여준다. 우리는 이미 Main() 함수가 어떻게 생긴지 알기때문에&amp;nbsp; 이번에는 Step over 명령어 [F8] 을 사용해 함수 내부로 진입하지 않고 하나하나 실행해보자 ( Ctrl + [F9]&amp;nbsp; 명령어 사용시 함수의 RET까지 빠르게 실행 할수 있다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 153657.jpg&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s4676/btrUHMFWDxK/fCcOjKpMzxJh2oQkZQX6i1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s4676/btrUHMFWDxK/fCcOjKpMzxJh2oQkZQX6i1/img.jpg&quot; data-alt=&quot;40270C 함수의 끝부분 (RETN)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s4676/btrUHMFWDxK/fCcOjKpMzxJh2oQkZQX6i1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs4676%2FbtrUHMFWDxK%2FfCcOjKpMzxJh2oQkZQX6i1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;306&quot; data-filename=&quot;화면 캡처 2022-12-26 153657.jpg&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;311&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;40270C 함수의 끝부분 (RETN)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4027A1 주소에 RETN 명령어가 있는걸 알수있다. RETN은 함수의 끝에서 사용되며 이 함수가 호출된 원래 주소 쪽으로 되돌아간다. 위 경우는 리턴주소가 4011A5이다. [F8]을 눌러 리턴주소로 이동하자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 155847.jpg&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf8pdY/btrUwotBqW8/vBKDW8VEL3VStaYtgg61RK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf8pdY/btrUwotBqW8/vBKDW8VEL3VStaYtgg61RK/img.jpg&quot; data-alt=&quot;4027A1 에서 RETN 명령어 실행후 4011A5로 이동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf8pdY/btrUwotBqW8/vBKDW8VEL3VStaYtgg61RK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf8pdY%2FbtrUwotBqW8%2FvBKDW8VEL3VStaYtgg61RK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;131&quot; data-filename=&quot;화면 캡처 2022-12-26 155847.jpg&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;4027A1 에서 RETN 명령어 실행후 4011A5로 이동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.5&amp;nbsp; 40104F 점프문 따라가기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4011A5 주소의 JMP 40104F 명령을 실행( [F8] ) 해서 해당 주소로 가보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 160355.jpg&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yKFeu/btrUyiT0XdY/UWTgw56mQkkQyVimQcsjZ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yKFeu/btrUyiT0XdY/UWTgw56mQkkQyVimQcsjZ0/img.jpg&quot; data-alt=&quot;jmp 40104F 실행 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yKFeu/btrUyiT0XdY/UWTgw56mQkkQyVimQcsjZ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyKFeu%2FbtrUyiT0XdY%2FUWTgw56mQkkQyVimQcsjZ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;365&quot; data-filename=&quot;화면 캡처 2022-12-26 160355.jpg&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;jmp 40104F 실행 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 40104F 주소부터 함수 호출 명령어를 하나하나 따라가보자... 저자께서 처음엔 귀찮더라도 하나하나 다 실행보고 가라고 하셨다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.6 Main() 함수 찾기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쭉~~ 따라가 보다 보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 161657.jpg&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPuRGy/btrUBb7UFR4/KdyXLz9Cgi3smekEr0rPDK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPuRGy/btrUBb7UFR4/KdyXLz9Cgi3smekEr0rPDK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPuRGy/btrUBb7UFR4/KdyXLz9Cgi3smekEr0rPDK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPuRGy%2FbtrUBb7UFR4%2FKdyXLz9Cgi3smekEr0rPDK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;108&quot; data-filename=&quot;화면 캡처 2022-12-26 161657.jpg&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;401144 주소에 CALL 401000 호출하는 명령어가 있는데 Step into [F7] 로 들어가보면 MessageBoxW() API를 호출하는 코드를 확인 할 수 있다. 그 API의 파라미터가 &quot;www.reversecore.com&quot;과 &quot;Hello World!&quot; 문자열인것으로 보아 우리가 찾던 Main() 함수인걸 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 161231.jpg&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oA6tG/btrUBbfMiTG/8wxoaiMJCHldUKnlJoAu0k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oA6tG/btrUBbfMiTG/8wxoaiMJCHldUKnlJoAu0k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oA6tG/btrUBbfMiTG/8wxoaiMJCHldUKnlJoAu0k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoA6tG%2FbtrUBbfMiTG%2F8wxoaiMJCHldUKnlJoAu0k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;68&quot; data-filename=&quot;화면 캡처 2022-12-26 161231.jpg&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 디버거 능숙하게 다루기&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.1 디버거 명령어&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 88.9535%; height: 437px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 24.8449%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.0543%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;단축키&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.1007%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 24.8449%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Step Into&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.0543%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;F7&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.1007%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;하나의 OP code 실행(함수 내부로 들어감)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.8449%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Step Over&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.0543%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;F8&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.1007%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;하나의 OP code 실행(함수 내부로 안 들어감)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.8449%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Restart&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.0543%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Ctrl+F2&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.1007%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;다시 디버깅시작(프로세스 종료하고 재실행시킴)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.8449%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Go to&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.0543%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Ctrl+G&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.1007%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;원하는 주소 찾아감(코드 확인할때 사용, 실행되는 것은 아님)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.8449%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Run&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.0543%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;F9&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.1007%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;실행(BP 걸려있으면 그 곳에서 실행 정지)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.8449%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Execute till return&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.0543%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Ctrl+F9&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.1007%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;함수 코드 내에서 RETN 명령까지 실행(함수 탈출 목적)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.8449%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Execute till cursor&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.0543%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;F4&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.1007%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;cursor 위치까지 실행(디버깅 주소까지 바로 갈 수 있음)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.8449%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Comment&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.0543%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;:&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.1007%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Comment 추가&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 24.8449%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Edit data&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.0543%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;Ctrl + E&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.1007%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;데이터 편집&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 24.8449%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;Assemble&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.0543%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;Space&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.1007%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;어셈블리 코드 작성및 수정&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.2&amp;nbsp; 베이스 캠프&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디버거를 재실행할 때마다 매번 EP 코드부터 새로시작 &amp;rarr; 비효율적&lt;/li&gt;
&lt;li&gt;코드 중간주간에 분석을 원하는 중요 포인트(주소)를 지정하여 그 포이트로 빠르게 이동하여 분석하는게 효율적&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr;등산에서 베이스 캠프와 같은 역할&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● 베이스 캠프 설정법&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;Goto 명령어 사용 [Ctrl + G] 후, [F4]명령으로 커서까지 프로그램 실행&lt;/li&gt;
&lt;li&gt;BP 설정 [F2]&lt;/li&gt;
&lt;li&gt;주석 삽입 [ ; ]&amp;nbsp;&lt;/li&gt;
&lt;li&gt;레이블 설정 [ : ]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 원하는 코드 빨리 찾아내는 4가지 노하우&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.1 코드 실행 방법&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디버거로 Step over [F8] 을 반복 수행하면서, 분석자가 확인할 수 있는 상황이 나타날 때까지 계속 실행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.2&amp;nbsp; 문자열 검색 방법&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그램 내에서 사용되는 &quot;문자열&quot;을 확인&lt;/li&gt;
&lt;li&gt;Code Window 에서 [우측마우스]&amp;nbsp; &amp;rarr; [seacrh for] &amp;rarr; [Current Modules] &amp;rarr; [All Referenced text strings]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 165252.jpg&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;297&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nOxdw/btrUDiMw3bE/uZBkjD03okwLJYIUKlQ5D0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nOxdw/btrUDiMw3bE/uZBkjD03okwLJYIUKlQ5D0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nOxdw/btrUDiMw3bE/uZBkjD03okwLJYIUKlQ5D0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnOxdw%2FbtrUDiMw3bE%2FuZBkjD03okwLJYIUKlQ5D0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;206&quot; data-filename=&quot;화면 캡처 2022-12-26 165252.jpg&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;297&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 165714.jpg&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;317&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5tquV/btrUxpTcz3R/i87FlJZUtfoqVovw5sdKb0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5tquV/btrUxpTcz3R/i87FlJZUtfoqVovw5sdKb0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5tquV/btrUxpTcz3R/i87FlJZUtfoqVovw5sdKb0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5tquV%2FbtrUxpTcz3R%2Fi87FlJZUtfoqVovw5sdKb0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;132&quot; data-filename=&quot;화면 캡처 2022-12-26 165714.jpg&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;317&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색 하려는 문자열을 더블 클릭하거나 Goto 명령어를 사용하여 이동할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.3&amp;nbsp; API 검색&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용된 API를 검색&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Code Window 에서 [우측마우스]&amp;nbsp; &amp;rarr; [seacrh for] &amp;rarr; [Current Modules] &amp;rarr; [All intermodular calls]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 171214.jpg&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rDBVb/btrUxeRXILY/QXIrxvaW4mieB3PZIwhDT0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rDBVb/btrUxeRXILY/QXIrxvaW4mieB3PZIwhDT0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rDBVb/btrUxeRXILY/QXIrxvaW4mieB3PZIwhDT0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrDBVb%2FbtrUxeRXILY%2FQXIrxvaW4mieB3PZIwhDT0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;490&quot; data-filename=&quot;화면 캡처 2022-12-26 171214.jpg&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 171114.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3NNAW/btrUDh71dEb/0aofC2ZaWGuw7clisjED20/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3NNAW/btrUDh71dEb/0aofC2ZaWGuw7clisjED20/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3NNAW/btrUDh71dEb/0aofC2ZaWGuw7clisjED20/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3NNAW%2FbtrUDh71dEb%2F0aofC2ZaWGuw7clisjED20%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;78&quot; data-filename=&quot;화면 캡처 2022-12-26 171114.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 API 확인후 더블클릭하거나 Goto 명령어로 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. &quot; Hello World!&quot;&amp;nbsp; 문자열 패치&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;nbsp;5.1 패치&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;패치 대상 : 파일 or 메모리 / 코드 or 데이터&lt;/li&gt;
&lt;li&gt;목표 : 메시지 박스의 &quot; Hello World!&quot;를 다른 문자로 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5.2 문자열 패치 방법 (1) - 문자열 버퍼를 직접 수정하기&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;덤프 창에서 Goto 명령으로 문자열 주소로 이동&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 171833.jpg&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;17&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciONiu/btrUwqdG87A/bugoazrbtbX1NvMeOkfXd1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciONiu/btrUwqdG87A/bugoazrbtbX1NvMeOkfXd1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciONiu/btrUwqdG87A/bugoazrbtbX1NvMeOkfXd1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciONiu%2FbtrUwqdG87A%2FbugoazrbtbX1NvMeOkfXd1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;16&quot; data-filename=&quot;화면 캡처 2022-12-26 171833.jpg&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;17&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 171908.jpg&quot; data-origin-width=&quot;538&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lRKTN/btrUIfVCSuf/U6EVy49aecL6kpsSKCeXf1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lRKTN/btrUIfVCSuf/U6EVy49aecL6kpsSKCeXf1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lRKTN/btrUIfVCSuf/U6EVy49aecL6kpsSKCeXf1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlRKTN%2FbtrUIfVCSuf%2FU6EVy49aecL6kpsSKCeXf1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;132&quot; data-filename=&quot;화면 캡처 2022-12-26 171908.jpg&quot; data-origin-width=&quot;538&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;마우스로 변경할 메모리 전체 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 173258.jpg&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bteOtn/btrUHSTScUJ/pH5R2XdvrGtgHns2qspGeK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bteOtn/btrUHSTScUJ/pH5R2XdvrGtgHns2qspGeK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bteOtn/btrUHSTScUJ/pH5R2XdvrGtgHns2qspGeK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbteOtn%2FbtrUHSTScUJ%2FpH5R2XdvrGtgHns2qspGeK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;121&quot; data-filename=&quot;화면 캡처 2022-12-26 173258.jpg&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[Ctrl + E]&amp;nbsp; 명령어를 사용해 문자열 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 172016.jpg&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;635&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuz5CM/btrUzmB1ECg/Ennmgug9rNpOoD7cCbcFB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuz5CM/btrUzmB1ECg/Ennmgug9rNpOoD7cCbcFB1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuz5CM/btrUzmB1ECg/Ennmgug9rNpOoD7cCbcFB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcuz5CM%2FbtrUzmB1ECg%2FEnnmgug9rNpOoD7cCbcFB1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;329&quot; data-filename=&quot;화면 캡처 2022-12-26 172016.jpg&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;635&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  주의할점!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 문자열 입력시 문자열 길이에 주의해야하는데,&amp;nbsp; 유니코드 문자열은 2바이트 NULL로 끝나야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 유니코드 항목에는 NULL을 입력할 수 없으므로 HEX 항목에다 NULL을 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 172523.jpg&quot; data-origin-width=&quot;206&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLiW46/btrUxeEvIvP/M4kjee5fs2SCAsGSeFBCok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLiW46/btrUxeEvIvP/M4kjee5fs2SCAsGSeFBCok/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLiW46/btrUxeEvIvP/M4kjee5fs2SCAsGSeFBCok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLiW46%2FbtrUxeEvIvP%2FM4kjee5fs2SCAsGSeFBCok%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;206&quot; height=&quot;162&quot; data-filename=&quot;화면 캡처 2022-12-26 172523.jpg&quot; data-origin-width=&quot;206&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5.2 문자열 패치 방법 (2) - 다른 메모리 영역에 새로운 문자열을 생성하여 전달&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;덤프 창에서 문자열을 저장할 영역 선택( 409F50)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 175447.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ue7lz/btrUGqwxZSg/z7oqzfgz5AVGK2XZ9pVFa0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ue7lz/btrUGqwxZSg/z7oqzfgz5AVGK2XZ9pVFa0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ue7lz/btrUGqwxZSg/z7oqzfgz5AVGK2XZ9pVFa0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUe7lz%2FbtrUGqwxZSg%2Fz7oqzfgz5AVGK2XZ9pVFa0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;62&quot; data-filename=&quot;화면 캡처 2022-12-26 175447.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[Ctrl + E] 명령어로 유니코드에 문자열 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 175151.jpg&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIRNhH/btrUwsCDRZF/1N6lZHcyEWdaAbByFvnG50/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIRNhH/btrUwsCDRZF/1N6lZHcyEWdaAbByFvnG50/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIRNhH/btrUwsCDRZF/1N6lZHcyEWdaAbByFvnG50/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIRNhH%2FbtrUwsCDRZF%2F1N6lZHcyEWdaAbByFvnG50%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;592&quot; height=&quot;60&quot; data-filename=&quot;화면 캡처 2022-12-26 175151.jpg&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;401007코드창에서 space 바를 누른후 PUSH 409F50 으로 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 175308.jpg&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRQDFo/btrUJi5B3bi/ExZRAastIBHW4VpeSnLk5K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRQDFo/btrUJi5B3bi/ExZRAastIBHW4VpeSnLk5K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRQDFo/btrUJi5B3bi/ExZRAastIBHW4VpeSnLk5K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRQDFo%2FbtrUJi5B3bi%2FExZRAastIBHW4VpeSnLk5K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;45&quot; data-filename=&quot;화면 캡처 2022-12-26 175308.jpg&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 172523.jpg&quot; data-origin-width=&quot;206&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wLlvz/btrUxo7VYy7/amUGcDqP7gEI1bQq3Njuw0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wLlvz/btrUxo7VYy7/amUGcDqP7gEI1bQq3Njuw0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wLlvz/btrUxo7VYy7/amUGcDqP7gEI1bQq3Njuw0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwLlvz%2FbtrUxo7VYy7%2FamUGcDqP7gEI1bQq3Njuw0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;206&quot; height=&quot;162&quot; data-filename=&quot;화면 캡처 2022-12-26 172523.jpg&quot; data-origin-width=&quot;206&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Reverse Engineernig/study</category>
      <author>po3nyo</author>
      <guid isPermaLink="true">https://po3nyo.tistory.com/210</guid>
      <comments>https://po3nyo.tistory.com/210#entry210comment</comments>
      <pubDate>Mon, 26 Dec 2022 18:00:11 +0900</pubDate>
    </item>
    <item>
      <title>[리버싱 핵심원리] ch01. 리버싱 스토리</title>
      <link>https://po3nyo.tistory.com/209</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 리버스 엔지니어링&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Reverse Engineering, RE: &lt;b&gt;역공학&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작등을 분석하여 원리를 이해하며 단점을 보완하고 새로운 아이디를 추가하는 일련의 작업&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;54.jpg&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dL4Tvb/btrUvYam13o/9hmKGJwykvMD6z05FsOt3k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dL4Tvb/btrUvYam13o/9hmKGJwykvMD6z05FsOt3k/img.jpg&quot; data-alt=&quot;출처:https://news.samsungdisplay.com/21458&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dL4Tvb/btrUvYam13o/9hmKGJwykvMD6z05FsOt3k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdL4Tvb%2FbtrUvYam13o%2F9hmKGJwykvMD6z05FsOt3k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;820&quot; height=&quot;262&quot; data-filename=&quot;54.jpg&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:https://news.samsungdisplay.com/21458&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 리버스 코드 엔지니어링&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Reverse Code Engineering, RCE&lt;/li&gt;
&lt;li&gt;소프트웨어 분야의 역공학&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;se_3_02.gif&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/To4Rc/btrUuq5Vnwg/QZFiaLJ7CkyWMcOhDsvkLk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/To4Rc/btrUuq5Vnwg/QZFiaLJ7CkyWMcOhDsvkLk/img.gif&quot; data-alt=&quot;출처:http://www.sycns.co.kr/sycns/02_business/security_se.asp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/To4Rc/btrUuq5Vnwg/QZFiaLJ7CkyWMcOhDsvkLk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/To4Rc/btrUuq5Vnwg/QZFiaLJ7CkyWMcOhDsvkLk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;641&quot; height=&quot;188&quot; data-filename=&quot;se_3_02.gif&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:http://www.sycns.co.kr/sycns/02_business/security_se.asp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.1 리버싱 분석방법&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● 정적분석&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일의 겉모습을 관찰하여 분석하는 방법 &amp;rarr; 파일을 실행시키지 않고 분석한다.&lt;/li&gt;
&lt;li&gt;파일의 내용확인 : 파일의 종류, 크기 헤더(PE)정보, Import/Export API, 내부분자열, 실행 압축여부, 등록정보, 디버깅정보, 디지털인증서, etc...&lt;/li&gt;
&lt;li&gt;디스어셈블러(Disassembler)을 이용해서 내부 코드와 구조를 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● 동적분석&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일을 직접 실행시킨 후 프로그램의 실행을 관찰&lt;/li&gt;
&lt;li&gt;실행중인 프로그램 행위를 분석: 파일, 레지스트리, 네트워크 등을 관찰&lt;/li&gt;
&lt;li&gt;디버깅을 통해 코드 흐름과 메모리 상태등으로 확인 : 프로그램 내부 구조와 동작 원리를 관찰&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.2 Source Code, Hex Code, Assembly Code&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● Source Code&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;우리가 IDE 를 통해 작성하는 코드를 말한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 110347.jpg&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbRRZp/btrUzl3sgX7/jww8FAkNtF94nCeTvKtjo0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbRRZp/btrUzl3sgX7/jww8FAkNtF94nCeTvKtjo0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbRRZp/btrUzl3sgX7/jww8FAkNtF94nCeTvKtjo0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbRRZp%2FbtrUzl3sgX7%2Fjww8FAkNtF94nCeTvKtjo0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;462&quot; height=&quot;236&quot; data-filename=&quot;화면 캡처 2022-12-26 110347.jpg&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● Hex Code&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빌드를 통해 생성된 실행파일은 2진수(Binary) 형식으로 되어있는데 2진수로 되어있는 코드를 직접보고 그의미를 파악하는것은 매우 힘든 일이다. 그래서 2진수를 16진수로 바꾸어 자릴수를 줄여 변환한 코드이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eYlhqV/btrUuqERpTb/kgU3Qaf9xvDy45vU7uXPDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eYlhqV/btrUuqERpTb/kgU3Qaf9xvDy45vU7uXPDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eYlhqV/btrUuqERpTb/kgU3Qaf9xvDy45vU7uXPDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeYlhqV%2FbtrUuqERpTb%2FkgU3Qaf9xvDy45vU7uXPDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;693&quot; height=&quot;264&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● Assembly Code&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Hex Code도 비교적 Binary Code보다 파악하긴 쉽지만 단순 숫자이기 때문에 의미를 직관적으로 알수 없어 이해하는데 어려움이 있다 그래서 사람이 더 쉽게 이해할 수 있는 Assembly code로 변환한 코드이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2022-12-26 111402.jpg&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;313&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8yOVu/btrUuHT5mrV/T911sd3KKT6ueej0pSlPoK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8yOVu/btrUuHT5mrV/T911sd3KKT6ueej0pSlPoK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8yOVu/btrUuHT5mrV/T911sd3KKT6ueej0pSlPoK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8yOVu%2FbtrUuHT5mrV%2FT911sd3KKT6ueej0pSlPoK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;595&quot; height=&quot;313&quot; data-filename=&quot;화면 캡처 2022-12-26 111402.jpg&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;313&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.3 패치(Patch)와 크랙(Crack)&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● 패치(Patch)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그램의 파일 또는 실행중인 프로세스 메모리의 내용을 변경하는 작업&lt;/li&gt;
&lt;li&gt;프로그램의 취약점 수정과 기능 개선등이 주 목적&lt;/li&gt;
&lt;li&gt;EX) Windows Update&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;● 크랙(Crack)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비합법적인 패치&lt;/li&gt;
&lt;li&gt;주로 저작권을 침해하는행위(불법복제/사용등)에 주로 사용됨&lt;/li&gt;
&lt;li&gt;EX) 상용프로그램 크랙을통한 무료사용등..&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Reverse Engineernig/study</category>
      <author>po3nyo</author>
      <guid isPermaLink="true">https://po3nyo.tistory.com/209</guid>
      <comments>https://po3nyo.tistory.com/209#entry209comment</comments>
      <pubDate>Mon, 26 Dec 2022 11:21:39 +0900</pubDate>
    </item>
  </channel>
</rss>