본문 바로가기
Programming/Reversing

ASM 1

by NAMP 2009. 4. 9.

ASM 1 -  2009/04/09

 

  • 지역변수는 ebp - 로 접근
  • 매개변수는 ebp + 로 접근 

Add, Sub, Mul, Div      # 산술 연산. 

AND, OR, XOR          # 논리 연산

AND EAX, EBX    

XOR EAX, EAX         <------   return 0;                       # 0을 리턴. 

  • // EAX 에 리턴값을 저장해서 보낸다.  //

레지스터를 0으로 초기화 시킬때 XOR 사용. 

push => 스택에 값을 저장한다. 

  • 백업
  • 매개변수 전달

pop => 스택의 값을 뒤의 오퍼랜드에 저장.  후, esp - 4 

 

> label || 명령 || Operands || ; 주석

Operands => 피연산자 들의 사이즈는 동일해야 한다. 

mov esp, ebp                              / 리눅스는 방향 반대 /

레지스터/메모리주소.  ||  레지스터/메모리주소/값 

  • 세그먼트 레지스터들끼리는 연산을 할 수 없다. 

    • mov eax, DS
    • mov CS, eax

     

  • .586
  • .model flat, stdcall
  • option casemap:none
  •  
  • include c:\masm32\include\user32.inc
  •  
  • includelib c:\masm32\lib\user32.lib
  •  
  • .data
  • Titletxt db "샘플 프로그램", 0h
  • Text db "Hello World~!",0h
  •  
  • .code
  •  
  • main proc
  • pushebp
  • movebp, esp
  •  
  • push60h
  • pushoffset Titletxt
  • pushoffset Text
  • push0
  • callMessageBoxA
  •  
  • movesp, ebp
  • popebp
  • ret
  • main endp
  •  
  • end main

 

 

0012FFC0   0012FFF0                                         # Main 스택 프래임.   이 지점부터 메인 함수가 사용. 
  • 0012FFC4   7C817067  RETURN to kernel32.7C817067     # OS로 돌아갈 주소. 

  • 0012FFC8   7C940208  ntdll.7C940208

  • 0012FFCC   FFFFFFFF

  • 0012FFD0   7FFDA000

  • 0012FFD4   805532FA

  • 0012FFD8   0012FFC8

  • 0012FFDC   89A70020

  • 0012FFE0   FFFFFFFF  End of SEH chain

  • 0012FFE4   7C839AC0  SE handler

  • 0012FFE8   7C817070  kernel32.7C817070

  • 0012FFEC   00000000

  • 0012FFF0   00000000                       # main 함수를 호출한 함수의 ebp 위치

0012FFF4   00000000

0012FFF8   00401005  Noname1.<ModuleEntryPoint>

0012FFFC   00000000

 

Stepover => F8

 

화면_캡쳐21.png

 

ASM code

화면_캡쳐19.png

 

 

output

화면_캡쳐18.png


 

 

ABI = 함수 호출 규약 

 

  • 예약어  

    • 명령어
    • 지시어

 

word = 2 byte.
dword = 4 byte
Code word = 8 byte

 

db => Define Byte.

0h => NULL

함수 프롤로그

push ebp

mov ebp, esp


함수 에필로그

mov esp, ebp

pop ebp

ret


 

MessageBox Function

Displays a modal dialog box that contains a system icon, a set of buttons, and a brief application-specific message, such as status or error information. The message box returns an integer value that indicates which button the user clicked.

Syntax

 

 

int MessageBox(      
HWND hWnd, # 0 LPCTSTR lpText, # Text LPCTSTR lpCaption, # TextTitle UINT uType # 60h );

이 글은 스프링노트에서 작성되었습니다.

'Programming > Reversing' 카테고리의 다른 글

WinDBG  (0) 2009.04.23
IDIV  (0) 2009.04.12
MASM32 / EditPlus 연동  (0) 2009.04.09
Register  (0) 2009.04.08
Memory  (0) 2009.04.08

댓글