일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- javascript
- 카카오프로젝트100
- 오라클
- 보안뉴스 한줄요약
- 보안뉴스요약
- 자바스크립트 prototype
- 다크웹
- GIT
- 자바스크립트
- 자바스크립트 jQuery
- 카카오프로젝트
- 보안뉴스
- 자바스크립트 객체
- 자바스크립트 element api
- 보안뉴스한줄요약
- ES6
- php
- 깃허브
- 파이썬
- oracle
- oracle db
- 자바스크립트 기본 문법
- 자바스크립트 API
- 보안뉴스 요약
- 카카오프로젝트 100
- 자바스크립트 node
- Oracle SQL
- 랜섬웨어
- python
- numpy
- Today
- Total
FU11M00N
[어셈블리] 어셈블리어(nasm) 와 c언어 를 이용해 난수값 생성 1편. 본문
- nasm에서 난수값 뽑기.
어셈블리어(nasm) 환경에서 어떻게하면 난수 값을 뽑아 낼수 있을까요?
난수값을 뽑아내고 로또프로그램까지 한번 시도해봅시다.
필자는 평소 어셈블 코드를 작성할때 sasm 에디터를 많이 사용했는데,
c언어 파일에서 난수값을 뽑을려면 경로설정을 따로 해줘야하는게 많습니다.
위의 사진에서 링킹 경로와 nasm.exe 경로 등등 설정해주면 sasm 환경에서 진행하면됩니다.
필자는 경로설정하기가 귀찮아 따로 gcc를 설치해서 cmd창에서 진행하겠습니다.
(gcc 폴더에 다 집어 넣을거임 ex. nasm.exe random.c 환경변수 설정 등등)
https://sourceforge.net/projects/mingw/
제일먼저 위의 링크로 들어가 gcc를 다운받습니다.
먼저 sasm의 매크로파일을 사용하기위해 io.inc와 io64.inc 파일의 경로를 찾아가서 한 파일에 모읍니다.
(sasm의 매크로파일이란 어셈블리어 코드를 짤때 편하라고 이미 만들어져있는 매크로 함수들입니다.
ex) PRINT_DEC , PRINT_STRING 등등)
그 후 sasm에 설치되어있는 nasm 매크로 파일 macro.o macro64.o 과 nasm의 어셈블러 nasm.exe를
gcc 파일안에 넣어주겠습니다. (따로 파일만들어서 넣어주셔도됩니다.)
(macro.o 와 macro64.o 는 어셈코드를 링킹시킬때 필요합니다.)
위의 사진과같이 4개의 파일을 한 폴더로 모읍니다.
그럼 모든 준비가 끝났습니다. 테스트로 간단한 출력문 어셈코드를 한번 짜봅시다.
테스트를 하기전 알아둬야할 기본지식이 있습니다.
소스 파일(.asm) 은 어셈블러(nasm.exe)에 의해 목적파일(.obj)로 만들어집니다.
이 목적파일을 이용해서 링커(gcc.exe)는 최종 실행 파일을 만들게 됩니다.
위의 순서를 정리하자면,
test.asm(소스파일) ---> nasm.exe(어셈블러)를 통해 ---> test.obj(중간파일)로 변경됩니다. ---> 이것을 gcc.exe(링커) 가 ---> test.exe(실행파일로 만들어짐)
어셈블(중간파일 만들기)
- nasm.exe -g -f win32 <소스이름> -o <중간파일 이름>
- nasm.exe -g -f win64 <소스이름> -o <중간파일 이름>
링킹(실행파일 만들기)
- gcc.exe <중간파일이름> -g -o <실행파일 이름> -m32
- gcc.exe <중간파일이름> -g -o <실행파일 이름> -m64
-g : 디버깅 정보 포함
-f : 출력파일 포멧
-o 출력파일 이름
위의 사진과 같이 한곳으로 모았던 폴더로 이동합니다.
(필자는 gcc 파일에 다 넣어버림. 안그러고싶다면 gcc를 환경변수 설정해주고 원하는 폴더를 만든뒤 사진 1-3의 파일 4개를 자신이 원하는 폴더로 만들어버리면됨.)
test.asm 코드 입니다.
test.asm을 test.obj로 목적파일 만드는 과정
test.obj를 test.exe 실행파일로 만드는 과정
결괏값.
다음 글에서 C언어와 어셈블 코드를 링킹 시켜 로또 프로그램을 만들어보겠습니다.
'Programming > Assembly' 카테고리의 다른 글
[어셈블리] 어셈블리(nasm)와 c언어를 이용한 난수값 생성 2편 (0) | 2020.09.12 |
---|---|
[어셈블리어] 어셈블리 덧셈,뺄셈,곱셈,나눗셈 (0) | 2020.04.15 |
[어셈블리어] 어셈블리어 기초 이론 2 (0) | 2020.04.11 |
[어셈블리어] 어셈블리어란? 기초 이론 1 (0) | 2020.04.11 |