Tuuna Computer Science

포인터 배열 본문

Assembly

포인터 배열

GuTTe 2018. 6. 11. 19:05

@pointer_00401500:                                    ;<= Procedure Start
        PUSH EBP                            
        MOV EBP,ESP
        AND ESP,0FFFFFFF0h
        SUB ESP,020h                                   ;지역변수를 위한 공간 생성
        CALL @pointer_00401EC0                    ;<= Jump/Call Address Not Resolved
        MOV BYTE PTR SS:[ESP+01Fh],0Ah      ;10진수 : 10을 넣음
        MOV BYTE PTR SS:[ESP+01Eh],014h     ;10진수 : 20을 넣음
        MOV DWORD PTR SS:[ESP+010h],0        ;임시로 보관하기 위해 메모리를 0으로 초기화 함. 
        MOV DWORD PTR SS:[ESP+014h],0     
        MOV DWORD PTR SS:[ESP+018h],0
        LEA EAX,DWORD PTR SS:[ESP+01Fh]    ;주소를 따온다. (&num) 그리고 EAX레지스터에 넣는다.
        MOV DWORD PTR SS:[ESP+010h],EAX  ;그리고 메모리에 넣는다. (이는 포인터변수)라 칭할듯
        LEA EAX,DWORD PTR SS:[ESP+01Eh]       ;주소를 따온다. (&num1) 그리고 EAX레지스터에 넣는다.
        MOV DWORD PTR SS:[ESP+014h],EAX     ;포인터변수에 넣는다.
        MOV EAX,DWORD PTR SS:[ESP+014h]     ;메모리끼리는 값을 못 넣으니 EAX에 넣어서 
        MOVZX EAX,BYTE PTR DS:[EAX]              ;그 EAX레지스터에 있는 주소에 있는 값을 EAX에 넣는다.
        MOVSX EAX,AL
        MOV DWORD PTR SS:[ESP+4],EAX   
        MOV DWORD PTR SS:[ESP],pointer_00404000
          ; ASCII "%d"  올리디버거에서 1.10에서 (실행파일이름)이 올리디버거 2.20의 OFFSET과 같다.
          ;즉, OFFSET을 표시할걸 (실행파일이름)을 적는다. ㅋ 

        CALL printf                          ;<= Jump/Call Address Not Resolved
        MOV EAX,0
        LEAVE
        RETN                                 ;<= Procedure End


Comments