전체 글 62

조건 분기에 대하여

조건 분기를 하기 위해선 해당 조건이 있어야 합니다. 이 조건을 만들어 주는 명령어부터 먼저 살펴봅시다. 1. CMP cmp eax, ebx 이처럼 cmp는 두 개의 오퍼랜드를 필요로 하며, eax에서 ebx를 빼는 기능을 하며 결과는 따로 저장되지 않습니다. cmp의 결과는 eax가 ebx보다 크다, 작다, 같다, 다르다 등의 형태로 플래그가 세팅됩니다. 2. JZ(jump if zero) = JE(jump if equal), JNZ(~not~) = JNE 모든 조건 분기문은 다음처럼 해석이 됩니다. 예를 들자면 jz의 경우, jump if zero의 약자로 만일 '0'이라면 점프하라는 뜻입니다. 기억하시는데 한결 수월함을 느끼실 겁니다. 이 명령문은 두 오퍼랜드가 같은지 다른지를 살펴보는 데 사용됩니..

올리에서 실행파일과 연결된 DLL파일 디버깅하는 방법

올리에서 실행파일을 로드하면 로드한 파일만 분석작업을 진행합니다 그럼 DLL파일도 분석하도록해서 작업하면 되겠습니다 1. 올리 프로그램 실행 2. Debugging Options 열기 (단축키:Alt+O) 3. Events Tab 클릭 4. [v] Break on new module (DLL) 항목에 체크 표시 5. [ OK ] 버튼 클릭해서 창 닫고 작업할 프로그램(. EXE)을 로드 6. 대상 프로그램에서 새로운 모듈(DLL)을 사용할 때마다 멈추지요? 7. Executable modules창에 디버깅하길 원하시는 DLL파일이 보일 때까지 F9키를 누르세요 8. 찾았다면 원하는 모듈에 마우스를 double Click 하면 해당 모듈로 들어갑니다 9. Analyse code (Ctrl+A) 하신 후 작..

어셈블리 강좌7

제8 장. 반복 기법 -------------------------------------------------------------------------------- 8.1 루프(loop)명령 -------------------------------------------------------------------------------- 비교와 분기를 하나로 합쳐서 한 명령으로 할 수 있도록 된 루프(loop), 스트링(string) LOOP 명령 LOOP 명령은 CX레지스터를 뺄셈식 카운터로서 사용하고 , CX 레지스터가 0 이 될 때까지 어떤 문장들을 되풀이 반복한 뒤 지정한 라벨로 분기하는 명령입니다. 즉, CX에 설정 한 횟수만큼 반복을 하기 위한 명령인 것입니다. LOOP명령은 오퍼랜드에 분기하는..

어셈블리 2019.07.09

어셈블리 강좌6

6.5 프로시듀어의 배치 -------------------------------------------------------------------------------- PROC ~ ENDP는 사람이 보기 편하기 위한 구분에 불과하다. 어셈블러는 실제로 프로시 듀어를 구별하지 않는다. 예제)CALL2.ASM CODE SEGMENT ASSUME CS:CODE EOF EQU 1AH START: CALL GETCH JC EXITP ;--+여기에서 프로시듀어를 호출하고 있다. MOV DL, AL | CALL PUTCH ;--+ JMP START EXITP: MOV AH,4CH INT 21H GETCH PROC MOV AH,8 INT 21H CMP AL, EOF JNE GETCHEND STC RET GETCHEN..

어셈블리 2019.07.09

어셈블리 강좌5

제6장 비교 분기와 서브루틴 -------------------------------------------------------------------------------- 디버그(DEBUG)의 커맨드의 요약 -------------+----------------------------------------+------------------------- 커맨드 | 목적(Purpose) |명령 COMMAND | |형식(Format) -------------+----------------------------------------+------------------------- Assemble |문장을 어셈블 한다. A [번지] Compare |메모리를 비교한다. C범위 번지 Dump |메모리를 표시한다. D ..

어셈블리 2019.07.09

어셈블리 강좌4

5.10 곱셈 명령과 구조 -------------------------------------------------------------------------------- 곱셈 명령 MUL(multiply)에서는 8비트 * 8비트, 혹은 16비트 * 16비트 를 계산할 수가 있습니다. 사용할 때의 제한 : 우선 곱셈할 한쪽은 반드시 AL 레지스터(혹은 AX 레지스터 )에 넣어두지 않으면 안될 니다. 결과는 AX 레지스터(혹은 DX 레지스터를 상위 16비트, AX 레지스터를 하위 16비트 로 간주한 32비트 레지스터 )에 저장됩니다. 따라서 곱셈 명령의 오퍼랜드는 하나이다. 8비트 곱셈 곱셈 결과 저장 +---+ +------------------------------+ +---+ |AL | * | 8비트..

어셈블리 2019.07.09