Busan IT/Assembly2015. 10. 12. 08:56

==================================Outline====================================

pushad를 활용한 레지스터 출력

----------------------------------------------------------------------------

 

pushad를 사용하여 레지스터들의 값을 출력해보자.

 

 

 

; Line 21

push ebp

mov ebp, esp

sub esp, 44 ; 0000002cH

mov eax, DWORD PTR ___security_cookie

xor eax, ebp

mov DWORD PTR __$ArrayPad$[ebp], eax

 

ESPEBP의 차는 44이다.

 

EFL 값은 216이다.

 


코드를 최적화 시켜보자.

 

/*** 코드 ***/

main.asm


.386

.MODEL FLAT

PUBLIC _smart    ; '_smart'함수 외부 접근 허용 코드

.code

_start:
  _smart   PROC   NEAR32

    ; - entry code -
    push  ebp    
    mov   ebp, esp

    mov esp, [ebp+8]  ;esp obj로 이동
    add esp, 40    ;esp obj 가장 아래로 이동
    pushad      ;eip와 efl을 제외한 모든 레지스터 구조체에 삽입

    push [ebp+4]    ;eip 구조체에 삽입
    pushfd      ;efl 구조체에 삽입


    mov eax, ebp        
    add eax, 12    

    add esp, 20
    mov [esp], eax

    push [ebp]    ;main의 ebp를 삽입
    

    ; - exit code -
    mov  esp, ebp
    pop  ebp
    ret  
  
  _smart ENDP

 

반응형
Posted by newind2000