목록전체 글 (420)
외로운 Nova의 작업실
안녕하세요, 이번 시간에는 irvine32 라이브러리중에 문자열을 손쉽게 다룰 수 있게 해주는 스트링 프리미티브 명령어에대해서 알아보겠습니다. - 스트링 프리미티브 명령어 MOVSB, MOVSW, MOVSD : 데이터를 ESI가 가르키는 메모리에서 EDI가 가르키는 메모리로 복사한다. CMPSB, CMPSW, CMPSD : ESI와 EDI가 가르키는 두 메모리의 내용을 비교한다. SCASB, SCASW, SCASD : 누산기(AL,AX,EAX)의 값과 와 EDI가 가르키는 메모리의 내용을 비교합니다. STOSB, STOSW, STOSD : 누산기의 내용을 EDI가 가르키는 메모리에 저장합니다. LODSB, LODSW, LODSD : ESI가 가르키는 내용을 누산기로 적재합니다. 위 명령어들은 배열을 다루..
안녕하세요, 오늘은 프로시저를 정의하고 호출하는 강력한 수단에대해서 배워보도록 하겠습니다. - INVOKE, ADDR 우리는 지금까지 레지스터나 스택으로 프로시저에게 매개변수를 전달했습니다. 하지만 invoke 명령어를 이용하면 편하게 C언어에서 함수를 사용하는 것처럼 사용할 수 있습니다. 단, 매개변수는 역순으로 스택에 push됩니다. 바로 예제를 봐봅시다. .code invoke DumpArray, OFFSET array, LENGTHOF array, TYPE array 위 코드는 DumpArray 프로시저를 실행합니다. DumpArray 프로시저는 Array의 값들을 순서대로 콘솔에 출력해줍니다. 매개변수로는 배열의 주소, 배열의 길이, 배열의 크기를 주어야합니다. 위 코드는 MASM 어셈블러에 의..
안녕하세요, 이번시간에는 프로시저에서 사용할 수 있는 ENTER과 LEAVE 명령어 또, 지역변수를 만들어주는 LOCAL 명령어에 대해서 알아보겠습니다. - ENTER 명령어와 LEAVE 명령어 우리는 항상 스택을 사용하는 프로시저를 만들면 아래와 같은 코드를 사용하곤 했습니다. push ebp mov ebp, esp sub esp, numbytes//지역변수 공간 확보 위 3가지를 한번에 써주는 명령어가 ENTER 명령어 입니다. ENTER 명령어는 피연산자 2개가 있습니다. 하나는 지역변수 공간 확보를 위한 버이트수를 지정하는 상수이고, 다른 하나는 구문 중첩 수준 지정을 위한 상수입니다. 구문 중첩 수준 지정을 위한 상수는 항상 0으로 두면 됩니다. 그렇다면 예제를 하나 보도록 하겠습니다. plus..