일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- beans
- query
- array
- Kafka
- JavaScript
- System
- 포인터
- Call-by-reference
- Sort
- meta
- WebProgramming
- CLASS
- jsp
- UTF-8
- request
- 노드
- 악성코드
- API
- 윈도우즈
- 자료구조
- algorithm
- OOP
- java
- windows
- c++
- HTML
- function
- 투자
- CSS
- C
- Today
- Total
hahahia
Reversing String(readstring, writestring procedure사용법) 본문
ReadString procedure 사용법 =>
edx 레지스터에 입력받을 string의 OFFSET을 mov시키고
ecx 레지스터에 string의 SIZEOF(TYPE*LENGTHOF)값을 대입한 이후
call ReadString 명령문을 실행시키면 커서창에서 string을 입력받을 수 있다.
WriteString procedure 사용법 =>
edx 레지스터에 출력할 string의 OFFSET을 mov 시키고
call WriteString 명령문을 실행시키면 해당하는 string을 출력 할 수 있다.
/* revstr.asm */
INCLUDE Irvine32.inc
.data
buffer BYTE 50 DUP(0)
byteCount DWORD ?
.code
main PROC
mov edx, OFFSET buffer
mov ecx, SIZEOF buffer
call ReadString ; string을 입력받는 과정
mov byteCount, eax ; string의 길이를 받는 과정
mov ecx, byteCount ; string의 길이만큼 루프를 돌기 위한 제어문
mov esi, 0
L1:
movzx eax, buffer[esi]
push eax ; 스택에 차례로 넣는다
inc esi
loop L1
mov ecx, byteCount
mov esi, 0
L2:
pop eax ; 스택에서 차례로 빼온다.
mov buffer[esi], al
inc esi
loop L2
mov edx, OFFSET buffer
call WriteString ; 재배열(뒤집어진) 문자열을 출력한다.
call Crlf
exit
main ENDP
END main
// 스택에 문자열을 push한 이후 다시 pop하여 스택의 구조적 특징인 FILO를 이용해 문자열을 반대로 출력한다.
'Language > Assembly' 카테고리의 다른 글
Gotoxy를 통한 커서 컨트롤 예제(loop추가) (0) | 2012.05.04 |
---|---|
Gotoxy를 통한 커서 컨트롤 예제 (0) | 2012.05.04 |
SetTextColor procedure (0) | 2012.05.04 |
mov, add, sub 명령어 (0) | 2012.04.14 |
기초적인 어셈블리어 예제 (0) | 2012.04.04 |