이 영역을 누르면 첫 페이지로 이동
웬디의 기묘한 이야기 블로그의 첫 페이지로 이동

웬디의 기묘한 이야기

페이지 맨 위로 올라가기

웬디의 기묘한 이야기

C/C++ Windows Hooking 개발자의 블로그 입니다! 이곳은 개발 외에도 저의 취미들이 공유되는 기묘한 이야기가 펼쳐집니다.

[Assembly] 디버깅을 위한 8086 어셈블리

  • 2016.01.17 23:33
  • ⌨ DEVELOPMENT/Debugging
반응형

디버깅을 위해서는 항상 소스코드 레벨에서 할 수 없기때문에 어셈블리언어를 읽을 수 있어야 합니다.

디버깅을 위한 어셈블리는 언어를 깊이 많이 알지 못하더라도 디버깅을 할 수 있지만,

어셈블리를 모르면 디버깅하는데 많은 어려움이 있으므로 이번에 몇가지 소개시켜드리겠습니다.

실제로 디버깅시 사용되는 어셈블리어는 많이 없으며, 자주 나오는 패턴에는 소스코드를 보듯 익숙해질 필요가 있습니다.

ASSEMBLY

가장 대표적인 명령어를 예로 들자면 아래와 같습니다.

mov (값을 대입)

add (더하기)

sub (빼기)

inc (1 더하기)

dec (1 빼기)

jmp (go to)

call (함수 호출)

cmp (두 값을 비교)


각각 C언어와 비교하면서 어떻게 코드가 생성되는지 보겠습니다.


해당 코드는 visual studio 2015 에서 테스트 하였습니다.

mov

    int number = 0;

0108383E  mov         dword ptr [number],0

  

    char flag = 1;

01083845  mov         byte ptr [flag],1  


    char name[] = "hacker_n0te";

01083849  mov         eax,dword ptr [string "hacker_n0te" (01086CB8h)]  

0108384E  mov         dword ptr [name],eax


add

    int number1 = 1;

003D3863  mov         dword ptr [number1],1  

    int number2 = 2;

003D386A  mov         dword ptr [number2],2  

    int number3 = 3;

003D3871  mov         dword ptr [number3],3  


    number = number1 + number2 + number3;

003D3878  mov         eax,dword ptr [number1]  

003D387B  add         eax,dword ptr [number2]  

003D387E  add         eax,dword ptr [number3]  

003D3881  mov         dword ptr [number],eax


sub

    int number1 = 1;

00113863  mov         dword ptr [number1],1  

    int number2 = 2;

0011386A  mov         dword ptr [number2],2  

    int number3 = 3;

00113871  mov         dword ptr [number3],3  


    number = number3 - number2 - number1;

00113878  mov         eax,dword ptr [number3]  

0011387B  sub         eax,dword ptr [number2]  

0011387E  sub         eax,dword ptr [number1]  

00113881  mov         dword ptr [number],eax


jmp

    for (int i = 0; i < 10; i++) {

00AE4AAC  mov         dword ptr [ebp-70h],0  

00AE4AB3  jmp         main+8Eh (0AE4ABEh) 

00AE4AB5  mov         eax,dword ptr [ebp-70h]  // (main+85h)

00AE4AB8  add         eax,1  

00AE4ABB  mov         dword ptr [ebp-70h],eax  

00AE4ABE  cmp         dword ptr [ebp-70h],0Ah  // (main+8Eh)

00AE4AC2  jge         main+0A1h (0AE4AD1h)  

        if (true) {

00AE4AC4  mov         eax,1  

00AE4AC9  test        eax,eax  

00AE4ACB  je          main+9Fh (0AE4ACFh)  

            continue;

00AE4ACD  jmp         main+85h (0AE4AB5h)  

        }

    }

... // (main+0A1h)


call

    printf(name);

00814ADD  lea         eax,[name]  

00814AE0  push        eax  

00814AE1  call        _printf (0811352h)  

00814AE6  add         esp,4


cmp


    if (number1 == number2) {

00E34A9E  mov         eax,dword ptr [number1]  

00E34AA1  cmp         eax,dword ptr [number2]  


    if (number1 == number2) {

00E34AA4  jne         main+7Dh (0E34AADh)  

        number3 = 10;

00E34AA6  mov         dword ptr [number3],0Ah  

    }




반응형
저작자표시 비영리 동일조건 (새창열림)

'⌨ DEVELOPMENT > Debugging' 카테고리의 다른 글

dump 분석을 위한 windbg 64bit 다운로드 및 설치  (0) 2019.08.04
[Debugging] 프로세스 크래시 발생시 덤프 남기기  (0) 2016.01.22
[WinDbg] 특정 프로세스 디버깅하기  (0) 2016.01.13
[WinDbg] DriverEntry부터 디버깅 시작하기  (2) 2016.01.10
[windows] 윈도우 64bit Driver 서명없이 로드하기  (2) 2016.01.10
[WinDbg] vmware에 WinDbg 연결하여 디버깅 준비하기  (0) 2016.01.06
[WinDbg] Kernel Debugging을 위한 디버거 다운로드 및 설치!  (0) 2016.01.05
visual studio 디버깅시 디스어셈블리 확인하기  (0) 2015.12.31

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • dump 분석을 위한 windbg 64bit 다운로드 및 설치

    dump 분석을 위한 windbg 64bit 다운로드 및 설치

    2019.08.04
  • [Debugging] 프로세스 크래시 발생시 덤프 남기기

    [Debugging] 프로세스 크래시 발생시 덤프 남기기

    2016.01.22
  • [WinDbg] 특정 프로세스 디버깅하기

    [WinDbg] 특정 프로세스 디버깅하기

    2016.01.13
  • [WinDbg] DriverEntry부터 디버깅 시작하기

    [WinDbg] DriverEntry부터 디버깅 시작하기

    2016.01.10
다른 글 더 둘러보기

정보

웬디의 기묘한 이야기 블로그의 첫 페이지로 이동

웬디의 기묘한 이야기

  • 웬디의 기묘한 이야기의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록
  • 이야기

카테고리

  • 분류 전체보기 (204)
    • MY STORY (2)
    • 📸 WALKING WITH YOU (85)
      • 아이슬란드 신혼여행 이야기 (14)
      • 대한민국 구석구석 (62)
      • CONTAX N1 + T* 28-80mm (4)
      • SAMSUNG NX3000 (1)
      • 어느 멋진 날 (4)
    • ⌨ DEVELOPMENT (80)
      • BOOK:Review (1)
      • AI (13)
      • C++ (26)
      • Python (10)
      • WIndows Hooking (9)
      • Windows Kernel (3)
      • Design Pattern (3)
      • Debugging (9)
      • Tools (0)
      • Project (1)
      • Android (1)
      • 상업용 무료폰트 (4)
    • OS (4)
      • News (0)
      • Windows 일반 (4)
    • 모바일 (2)
      • 모바일 게임 (2)
    • 멘사 퍼즐 (9)
    • 생활 꿀 TIP (7)
      • 건강 (3)
      • 일상 (2)
    • 물생활 (8)
      • 골든볼 라미네지 롱핀 (8)
    • IT 기기 (2)
    • BLOG (4)
      • TISTORY BLOG TIP (3)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 해외여행
  • 아이슬란드
  • c++
  • 카페
  • windbg
  • c
  • AI
  • 신혼여행

나의 외부 링크

  • kernel undocument api
  • 지구 관찰자의 일기
  • 지구와 지구곰

정보

WENDYS의 웬디의 기묘한 이야기

웬디의 기묘한 이야기

WENDYS

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © WENDYS. Designed by Fraccino.

티스토리툴바