목록전체 글 (420)
외로운 Nova의 작업실
안녕하세요, 이번시간에는 간접 참조에대해서 좀 더 정리를 해볼까합니다. LEA 명령어 간접 참조에 대해 설명하기 좋은 명령어가 있습니다. 바로 LEA 명령어 입니다. LEA 명령어에 대해 알기전에 한가지 물음을 던져 보겠습니다. 우리는 간접 참조를 한다고 하면 아래와 같이 사용합니다. .code mov eax, [ebx] 만약, ebx에는 0x12345678이라는 값이 들어있고, 0x12345678 번지주소에는 0xAABBCCDD 값이 있다고 치면 eax에는 어떤 값이 들어가게 될까요? 답은 0xAABBCCDD입니다. [ebx] -> [0x12345678] -> 0xAABBCCDD 로 변경됩니다. 즉, 0x12345678 번지주소에 있는 값으로 변경되는 것입니다. 그렇다면 만약 아래와 같은 코드는 어떻게..
안녕하세요. 이번시간에는 스택 프레임에대해서 알아보도록 하겠습니다. - 스택 프레임 스택 프레임은 스택안에서 함수에 의해 나눠진 공간을 의미합니다. 즉 main 프로시저안에서 프로시저1, 프로시저2, 프로시저3이 있고, 각 프로시저마다 스택에 변수를 넣는다면, 스택에는 프로시저1의 공간, 프로시저 2의 공간. 프로시저3의 공간으로 나눠지며, 각각을 스택 프레임이라고 할 수 있습니다. 스택은 상위주소에서 하위주소로 저장을 합니다. EBP는 Enhance Base Pointer로 각 스택 프레임의 첫 시작 포인터를 의미합니다. 스택프레임은 EBP가 저장된 주소를 기준으로 나뉘어지며, 항상 함수를 시작할때는 이전의 EBP값을 저장시켜주어야합니다. main 프로시저안에 프로시저1, 프로시저 2, 프로시저3 이있..
안녕하세요. 이번시간에는 double 시프트 연산자와 곱셈, 나눗셈에대해 배워보도록 하겠습니다. - SHLD 와 SHRD SHLD 는 shift left double 명령어로, 소스 비트와 목적지 비트를 연결해서 left 해줍니다. 예시를 한번 보겠습니다. .code mov al, 11110000b mov ah, 00001111b SHLD ah, al, 4 위 코드를 실행하게되면 ah - al 이 연결되며 왼쪽으로 시프트 하게됩니다. 즉, 00001111(ah) - 11110000(al) 이 상태에서 왼쪽으로 시프트 하는 거죠. 연산결과는 11111111(ah) - 00000000(al) 입니다. 왜냐면 마지막 4가 4번 하라는 뜻이기 때문입니다. 여기서 소비트는 al 이며, 목적지 비트는 ah라 부릅니..