게임 서버나 몇몇 리눅스 매니아?분 들을 위하여 글을 작성 합니다?


리눅스에서 unity3d는 experimental로 유니티를 지원 해줌니다.


http://blogs.unity3d.com/kr/2015/08/26/unity-comes-to-linux-experimental-build-now-available/


에서 deb 파일이나 sh파일로 설치가 가능합니다.


유니티는 따로 개발 코드를 작성하기위한 ide를 지원하지 않고 유니티를 지원하는 ide를 이용하여 개발을 해야 합니다.


허나 아직 리눅스에서 c#을 지원하는 ide는 딱히 이거다 하는 도구는 없습니다.


vscode가 유니티를 지원 해줌으로써 자동완성기능이나 디버깅을 할 수 있습니다.


따라서 vscode + unity3d + mono-complete로 작성이 가능합니다.


유니티에서 간단히 테스트를 할 프로젝트를 생성 합니다.


그리고 Assets 폴더에 git clone https://github.com/dotBunny/VSCode.git 으로 다운로드 받은 파일중 plugin 폴더를 넣습니다.


이 스크립트는 vscode하고 unity를 서로 연동을 해줍니다.


https://www.visualstudio.com/en-us/products/code-vs.aspx 에서 vscode를 다운로드 하고 설치가 가능합니다.


/opt 폴더에 바이너리 파일을 널고 /usr/share/application 폴더에 다음과 같이 작성 하여 .desktop 파일을 생성합니다.


[Desktop Entry]

Version=1.0

Type=Application

Name=VSCode

Icon=/opt/VSCode-linux-x64/resources/app/resources/linux/code.png

Exec=/opt/VSCode-linux-x64/Code %U

Comment=VSCode IDE

Categories=Development;IDE;

Terminal=false


그리고 유니티에서 vscode를 사용 하기 위해서는 /usr/bin 폴더에 심볼릭 링크로 등록을 해놔야 합니다.


심볼릭 링크를 등록 할때 Edit -> preferences에서 External Script Editor가 그냥 code 인지 Code인지 알아야 합니다.



VSCode 바이너리 실행 파일이 Code로 대문자로 되어 있어서 저 처럼 code로 되어 있는 경우 대소문자를 인식해 실행되지 않습니다.


이제 preferences에서 vscode 설정이 가능합니다. 



이제 Assets -> sync MonoDevelop Project를 클릭 하여 vscode에서 프로젝트를 연동하여 사용 할수 있도록 합니다.


Asset -> open C# project in code를 클릭하여 vscode를 실행 합니다. 


vscode 오른쪽 밑이나 왼쪽 밑에 




불 모양의 버튼을 클릭 합니다. 



sln 파일을 선택하여 프로젝트를 불러옴니다.


이제 vscode에서 개발이 가능 합니다. 허나 자동 완성 기능이 제공 되지 않아 개발하는데에 많은 불편함이 있습니다.


mono-complete와 mono-devel를 설치하여 자동완성 기능을 사용이 가능 합니다.


허나 apt-get 이나 yum으로 설치해서 사용 하게되면 vscode에서 버전이 낮아서 자동완성을 사용하실 수가 업습니다. vscode에서는 4.0.1 이상을 요구 하고 apt-get으로 설치를 하면 3.2버전이 설치가 됨니다.


http://download.mono-project.com/sources/mono/ 에서 소스코드를 받아와서 컴파일을 하여서 최신 버전을 설치를 하셔야 합니다.


컴파일해서 설치하는 방법은 간단하게 앞축을 풀고


./confingure


make 


sudo make install


으로 설치가 가능합니다. 이제 vscode를 재실행 하면 자동완성 기능을 사용하면서 개발이 가능 합니다.


Posted by 준P

서버를 세팅 했으니 이제 서버를 컨트롤할 플러그인이 필요합니다.


이 플러그인을 제작할 작업 환경을 구축하는 방법을 다루어 보겠습니다.


우선 플러그인을 제작 가능한 환경은 eclipse, IntelliJ IDEA, NetBeans가 있습니다.


저는 이 작업 환경에서 IDEA를 사용하는데요 이 IDEA는 다른 작업 환경보다 훨씬 편한 작업 환경을 제공해 줍니다.


Pro 버전과 community 버전이 따로 있는데요 community버전은 무료 이므로 사용해보시는것을 추천 드림니다.



우선 project를 만들어여 하므로 Create New Project를 선택합니다.



왼쪽 팝업에서 Gradle을 선택해준신뒤 Next.



Group ID는 조직, 회사와 같은 내용을 적어줍니다. (팀명이나 그런것들?)


Artifact ID는 플러그인 이름을 적어줌니다.(Project 이름으로 사용됨니다.)


Version은 알맞게 설정하시면 됨니다.



아무 설정 하지 안고 넘어가도 되지만 추가적인 기능을 사용하실 분 이라면 알맞게 설정하시면 됨니다.



그냥 넘어가시면 됨니다.



프로젝트를 만들면 다음과 같은 화면이 나타남니다.


프로젝트 탐색기에서 build.gradle 파일을 선택해줍니다.



이파일을 다음과 같이 수정해줍니다.



입력 해주신뒤 Gradle에서 새로고침 해줍니다.



gradle 이 보이지 않는다면 View -> ToolWindows에서 Gradle을 선택해주시면 gradle이 나타남니다.



새로고침을 해주시면 프로젝트 탐색기에 다음과 같이 생성이 되는데요 이렇게 보이시면 성공입니다.


Src-> java에서 java파일을 생성해줍니다.  파일을 생성 하신뒤 다음과 같이 입력을 해줍니다.



class위에 


@Plugin(id = "", name = "", version = "1.0")


을 입력 해줍니다. id는 로그나 여러 출력이 될때 사용됨니다. name은 개발자? 입력해주시면됩니다. version은 알맞게?


이제 서버를 컨트롤 하기 위한 코드를 작성 해봅시다!!



개발자가 데이터 값이나 출력값을 보기 위해서는 로그를 남기는 Logger가 필요합니다.


이 Logger는 플러그인에 인젝션 되기 떄문에 @Inject 옵션을 붙여줍니다.


플러그인은 Event에 따른 코드를 추가할수 있습니다.


Event는 서버가 실행되는 이벤트나 혹은 Player가 접속하는 이벤트나 여러 이벤트가 있습니다.


이 이벤트를 받아보기 위해서는 @Listener를 메소드위에 붇여주셔야 합니다.


또 이벤트 메소드는 인자값에 따른 이벤트가 들어오므로 메소드 이름은 자유롭게 작성하시면 됨니다. 중요한것은 인자값으로 어떤 이벤트가 들어오는가 입니다.


이렇다보니 메소드는 외부에서 받아오기 때문에 매번 회색으로 변해 있습니다. 줄도 쳐져 있고 ㅠㅠ 그래서 메소드 이름에서 ALT + Enter를 하시면 



다음과 같은 옵션이 생김니다. Supress for methods annotated by ~ 어쩌고 하는 옵션을 클릭해줍니다.


그러면 메소드가 다음 처럼 변경이 됨니다.



logger로 서버가 실행되었다는 메세지를 출력할 수 있습니다.


이제 간단한 플러그인을 제작 하였으므로 jar파일을 추출 해봅시다.!!



File -> Project Structure에서 Artifacts 에서 + 버튼을 눌룬뒤 Jar -> from modules with dependencies...를 선택해줍니다.


create JAR frome Modules에서 main Class를 만든 java파일을 선택해줍니다.




여기서 오류가 나시는분들은 그냥 나오시면 MainClass에 입력이 되어 있으면 무시 하시면 됨니다.



ok를 눌러서 넘어감니다.



Output directory를 마인크래프트 서버 mods 폴더로 설정을 해줍니다.


플러그인은 mods폴더에 있어야 해서 빌드하면 자동으로 생성되게 해줍니다.



빌드를 할때 다른 종속성 파일은 넣을 필요가 없기 때문에 제거 해줍니다.



이제 빌드 설정은 완료 되었습니다.


이제 적용하신뒤 나오시고 Build -> BuildArtifacts를 클릭하시면 중앙에 다음과 같은 작은 창이 뜸니다.



빌드를 해주면 됨니다.



플러그인이 생성되었습니다.



서버 로그에 작성했던 코드가 나타나는것을 확인 할 수 있습니다.



프로젝트 탐색기에서 빨간 폴더가 보여서 싫으신 분은 projectsturcture 에서 Modules에서 빤간 폴더를 선택 하신뒤 Excluded를 클릭하신뒤 Apply하시면 됨니다.


Posted by 준P

마인크래프트는 자신이 블록을 쌓거나 집이나 혹은 사냥을 하던가 하는 여러 자유로운 짓을? 할 수 있는 게임 입니다.


이번에는 이 게임의 서버를 열어보는 게시글을 작성 해보겠습니다.


SpongePowered라는 버킷을 이용해서 서버를 열어보도록 하겠습니다.


일단 마인크래프트는 기본적인 마인크래프트 서버가 있지만 이 서버에 추가적인 플러그인이나 모드를 넣을려면 포지를 사용하여 확장을 해줘야만 합니다.


http://files.minecraftforge.net/


에서 자신이 원하는 마인크래프트 버전의 서버를 열수 있는 포지를 다운로드 받을수 있습니다.


기본적으로 JAVA로 작성되어서 모든 플랫폼에서 작동을 합니다. 


Install server를 선택해주시고 마인크래프트 서버가 설치될 경로를 지정해줍니다.



기본적으로 JAVA가 설치되어 있어야하고 설치방법에 대해서는 언급하지 않겠습니다.



간단하게 다운로드가 진행이 되면서 서버가 설치가 됨니다.



확인을 눌러서 설치를 완료합니다.



이제 forge-<version>-universal.jar 파일을 실행시킴니다.



이러한 창이 뜨면서 로그 창에 많은 오류가 나타 남니다.


이제 에러가 뜨는게 없어지면서 로그에 라이센스를 동의해달라는 메세지가 나타남니다. 그러면 서버를 종료하고 

이 파일을 열어서 라이센스에 동의 해줍니다.



false -> true로 변경!!!



서버가 실행되면서 마저 서버에 필요한 데이터들을 설치합니다.


Done이라는 메세지가 보이면 기본적인 마인크래프트 서버가 오픈 되었다. 다시 종료하고


이제 마지막으로 SpongeForge을 집어 넣게되면 SpongeForge를 이용한 마인크래프트가 완성된다.


http://files.minecraftforge.net/spongepowered


에서 SpongeForge를 위한 모드를 다운로드 한다.


그리고

폴더에가서 (없을 경우 생성한다 Forge-<version>-universal.jar파일이 위치한 디렉토리에 생성한다)


모드 파일을 넣어준다. 넣어주고 서버를 재 실행 하게 되면 SpongeForge가 적용된 마인크래프드가 완성이 되었다...


이제 플러그인을 제작하거나 모드를 제작하여서 추가적인 기능을 넣어보자!!

Posted by 준P

npm 은 기본적으로 package.json 이라는 파일에 의존하여서 프로젝트를 관리 합니다.


따라서 모듈을 설치할려면 package.json이란 파일을 편집해야 하고 귀찬게 여러 설정을 해야하는데 


이번에는 간단하게 그 설정을 하는 방법을 소개 하면서 Angular JS를 설치해 봅니다.


먼저 프로젝트 폴더에 가서 


npm init


으로 package.json 파일 및 간단한 설정을 해줍니다.


기본적으로 그냥 엔터를 치면 ( ) 으로 감싸저 있는 값으로 설정이 됨니다.


( ) 으로 감싸진 값이 없으면 설정이 되지 않거나 아예 설정 자체를 하지 않습니다.



간단하게 package.json을 만들었습니다.


자세히 보시면 npm으로 설치 할때 --save  옵션을 붙여주면 자동으로 package.json에 추가를 해준 답니다!!!!



간단하게 


npm install exress --save


명령어로 모듈을 추가하면서 package.json파일이 수정 되었습니다. 그리고 node_modules라는 디렉토리가 생성되었습니다.



저는 미리 Angular를 추가해서 미리 Angular가 있습니다. 참고 하시길..


node_modules 폴더에는 express가 추가 되었습니다.!!!


Posted by 준P

npm 은 기본적으로 package.json 이라는 파일에 의존하여서 프로젝트를 관리 합니다.


따라서 모듈을 설치할려면 package.json이란 파일을 편집해야 하고 귀찬게 여러 설정을 해야하는데 


이번에는 간단하게 그 설정을 하는 방법을 소개 하면서 Angular JS를 설치해 봅니다.


먼저 프로젝트 폴더에 가서 


npm init


으로 package.json 파일 및 간단한 설정을 해줍니다.


기본적으로 그냥 엔터를 치면 ( ) 으로 감싸저 있는 값으로 설정이 됨니다.


( ) 으로 감싸진 값이 없으면 설정이 되지 않거나 아예 설정 자체를 하지 않습니다.



간단하게 package.json 파일을 만들었습니다.


여기서 자세히 보면 npm 으로 설치를 할떄 마지막에 --save 를 붙여주면 자동으로 package.json에 추가 해준다고 나와있네여



npm install angular --save


명령어로 angular를 프로젝트에 모듈로 설치를 했습니다.


package.json파일을 보면 angular js 가 추가적으로 있는것을 알수 있습니다.



또한 폴더 하나가 추가되는데 node_modules 라고 모듈을 모아 두는곳이 있습니다.


이곳 안에 Angular JS  모듈이 있습니다.

Posted by 준P

c++에서는 클래스에 소멸자 개념이 있다. 


헌데 c언어는 절차 지향 언어라서 OPP개념인 소멸자는 없다...


헌데 c언어에서도 메인 함수가 종료되기 전에 함수 하나를 실행 할수 있다.


프로그램 종료 하기전에 꼭 처리해야 하는 것이 있으면 좋을거 같다.





코드만 보면 printf 함수를 마지막으로 어떤한 함수는 호출되지 않았습니다.


허나 컴파일 해서 보면 


beforeexit함수가 실행되었습니다.


atexit함수로 종료할떄 실행한것 인데요


이 함수는 어떠한 리턴 형태를 가질수 없고 어떠한 인자를 가질 수는 없습니다.



Posted by 준P

node js 는 확장성있는 네트워크 프로그램 개발에 사영하는 플랫폼이다. 자바스크립트를 사용해 Non-Blocking과 단일 스레드 이벤트 루프를 통해 높은 처릐를 가지고 있다.


또한 웹서버 라이브러리를 가지고 있어서 따로 아파치나 IIS에 연동할 필요가 없다.


npm은 nodejs의 모듈을 관리한다.


apt로 간단하게 nodejs를 설치할수 있으나 버전업이 느리기 때문에 따로 설치를 해야 한다.

2년사이에 0에서 5까지 나왔다. ㄸㄸㄸㄸㄸ 


apt로는 0.x버전대만 설치가 된다.


https://nodejs.org/en/ 에서 최신 버전의 node js를 다운로드 받는다.


현제 2015년 12월 21일 기준으로 5.3.0 Stable과 4.2.3 LTS버전이 있다.


다운로드 받으면 tar.gz파일로 앞축파일이 나오는데 앞축을 풀고 configure파일을 실행한다.


./configure


빠르게 끝이 날것이다.


make


make에서 오랜시간이 걸리는데 참고 기달리자 알아보기 힘든 영문이 나올것이다. (엄청 정말로)



sudo make install


make install을 하게 되면 /usr/local/bin이라는 폴더에 node와 npm이 생길것이다.

 

설치를 완료하면 node를 터미널에서 바로 실행 할수 없는데


터미널에서 명령어로 실행하기 위해서는 /usr/bin폴더에 있어야 한다.


make install 할때 자세히 보면 


/usr/local/bin폴더에 생성이 되어 있다.


이파일을 그대로 옮기면 안되고 그냥 연결 파일을 만들어서 사용하면 된다.


ln명령어는 간단하게 링크 파일을 만들어 준다.



ln -s /usr/local/bin/node /usr/bin/node


ln -s /usr/local/bin/npm /usr/bin/npm


으로 간단하게 링크를 만들어서 사용하면 된다.



Posted by 준P

며칠전 애플에서 자사 언어인 swift를 오픈소스로 공개를 하였다 따라서 애플 플랫폼에서만 개발이 가능 하던것이 리눅스에서도 가능해졌다.


https://swift.org


공식 사이트에서는 리눅스와 애플 플랫폼만 지원을 한다.


공식 싸이트에서는 아주 간단하게? 설치를 할수 있다.


pgp키를 keyring에 넣고 서명을 확인 한뒤 깃허브에서 다운받은 소스를 앞축풀고 환경변수에 추가만 해주면 된다.


swift공식 사이트의 방법으로 설치를 해보자


우선 clang과 libicu-dev가 설치되어 있어야 한다.


sudo apt-get install clang libicu-dev

그리고 https://swift.org/download/#linux 에서 소스를 다운로드 받는다. 참고로 우분투 15.10과 14.04 를 기본적으로 지원을 하며 64비트에서만 동작을 한다.!!!  


다른 리눅스 플랫폼에서 되긴 되겟지만 공식적으로 지원은 안하는듯?하다.


자 이제 swift를 사용하기 위한 기본적인 준비는 끝났다. 


PGP 키를 서명한뒤에 파일을 풀고 패치만 넣으면 된다.


처음으로 설치를 하는 사람은 Keyring에 PGP키를 추가해야 한다. 이미 추가 된 사용자는 추가할필요는 없다.


gpg --keyserver hkp://pool.sks-keyservers.net \ --recv-keys \ '7463 A81A 4B2E EA1B 551F FBCF D441 C977 412B 37AD' \ '1BE1 E29A 084C B305 F397 D62A 9F59 7F4D 21A5 6D5F'

또는

wget -q -O - https://swift.org/keys/all-keys.asc | gpg --import -

이미 추가한 사용자는 키를 추가하는것이 아니고 새로 고치는것이기 때문에 다음과 같이 새로 고친다.


gpg --keyserver hkp://pool.sks-keyservers.net --refresh-keys Swift

pgp서명 확인은 생략......


swift를 다운로드 하면 snapshot 으로 다운로드 받을수 있다. (github에서 소스를 컴파일 해도 된다)


이 파일을 품면 폴더 안에 usr 폴더가 있고 안에 여러 폴더로 나누어져 있을 것이다.


tar xzf swift-snapshot-<vsersion>-<platform>.tar.gz


이 폴더를 /opt 폴더에 옮겨서 폴더가 여러개 생기는것을 방지하자(사용자 폴더에 여러 폴더는 보기 귀찬다.)


/opt에 폴더를 옮겼으면 이제 환경변수를 통하여 추가를 해보자


export PATH=/opt/swift-<version>-SNAPSHOT-<build date>-b-<platform>/usr/bin:"${PATH}"

이제 환경 변수를 통해서 swift 명령어를 사용 하여 프로그래밍이 가능하다.


매번 export 하여 프로그래밍 하긴 귀찬으니 환경 변수로 넣어두자!!(이를 위해 /opt에 넣었다!


cd /etc


sudo vim profile

혹은 사용자 환경변수에 넣는다 


vim .bashrc

맨 밑줄에 


export PATH=/opt/swift-<version>-SNAPSHOT-<build date>-b-<platform>/usr/bin:"${PATH}"
를 추가하자

source /etc/profile


사용자 환경변수 이면


source .bashrc

로 쉘스크립트를 실행하자


간단히 프로그래밍을 해보자



간단히 hello_Swift와 랜덤으로 숫자를 출력하는 프로그램이다.




잘된다!!!


Posted by 준P

openGL이란 

OpenGL(Open Graphics Library, 오픈지엘)은 1992년 실리콘 그래픽스사에서 만든 2차원 및 3차원 그래픽스 표준 API 규격으로, 프로그래밍 언어 간 플랫폼 간의 교차 응용 프로그래밍을 지원한다. 이 API는 약 250여개 가량의 함수 호출을 이용하여 단순한 기하도형에서부터 복잡한 삼차원 장면을 생성할 수 있다. OpenGL은 현재 CAD가상현실정보시각화, 비행 시뮬레이션 등의 분야에서 활용되고 있다. 또한 컴퓨터 게임 분야에서도 널리 활용되고 있으며, 마이크로소프트사의 Direct3D와 함께 컴퓨터 그래픽 세계를 양분하고 있다. Direct3D와는 달리, 표준안이 여러 관련 업체의 토론과 제안으로 이루어지기에 버전 업데이트는 느린 편이다. OpenGL을 사용하여 개발된 대표적인 게임은 이드 소프트웨어의 퀘이크둠3 시리즈이다. 현재 비영리 기술 컨소시엄인 크로노스 그룹에 의하여 관리되고 있다.


출처 https://ko.wikipedia.org/wiki/OpenGL


우분투에서 open GL 설치는 매우 간단 합니다.


터미널을 열고 


sudo apt-get install freeglut3-dev libglu1-mesa-dev mesa-common-dev


로 간단히 설치가 가능 합니다.



/usr/include/GL 에 위 사진 처럼 파일이 있는지 확인 합니다.


파일이 정상적으로 있으면 정상적으로 설치가 완료 된것입니다.


이제 이클립스에서 c/c++ 프로젝트를 만들어 주세요


간단히 소스 파일까지 만들고 정상적으로 빌드가 된다면 openGL 소스를 작성 합니다.


#include <GL/glut.h>

#define window_width  640

#define window_height 480

// Main loop

void main_loop_function() {

    // Z angle

    static float angle;

    // Clear color (screen)

    // And depth (used internally to block obstructed objects)

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // Load identity matrix

    glLoadIdentity();

    // Multiply in translation matrix

    glTranslatef(0, 0, -10);

    // Multiply in rotation matrix

    glRotatef(angle, 0, 0, 1);

    // Render colored quad

    glBegin(GL_QUADS);

    glColor3ub(255, 000, 000);

    glVertex2f(-1, 1);

    glColor3ub(000, 255, 000);

    glVertex2f(1, 1);

    glColor3ub(000, 000, 255);

    glVertex2f(1, -1);

    glColor3ub(255, 255, 000);

    glVertex2f(-1, -1);

    glEnd();

    // Swap buffers (color buffers, makes previous render visible)

    glutSwapBuffers();

    // Increase angle to rotate

    angle += 0.25;

}

// Initialze OpenGL perspective matrix

void GL_Setup(int width, int height) {

    glViewport(0, 0, width, height);

    glMatrixMode(GL_PROJECTION);

    glEnable(GL_DEPTH_TEST);

    gluPerspective(45, (float) width / height, .1, 100);

    glMatrixMode(GL_MODELVIEW);

}

// Initialize GLUT and start main loop

int main(int argc, char** argv) {

    glutInit(&argc, argv);

    glutInitWindowSize(window_width, window_height);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);

    glutCreateWindow("GLUT Example!!!");

    glutIdleFunc(main_loop_function);

    GL_Setup(window_width, window_height);

    glutMainLoop();

}


작성후 빌드를 하면 정상적으로 해더는 추가가 되지만 빌드는 오류가 남니다.

프로젝트에서 오른쪽 클릭으로 properties -> c/c++ build -> Settings -> tool settings -> GCC c Linker or GCC C++ Linker -> libaries 에서 옵션을 추가  해줌니다.



apply 후 나오시고 재빌드 하신뒤 실행을 하시면 정상적으로 컴파일이 되면서 실행이 됨니다.



Posted by 준P

어셈블리어(영어: Assembly language)는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍 저급 언어이다.

컴퓨터 구조에 따라 사용하는 기계어가 달라지며, 따라서 기계어에 대응되어 만들어지는 어셈블리어도 각각 다르게 된다. 컴퓨터 CPU마다 지원하는 오퍼레이션의 타입과 개수는 제각각이며, 레지스터의 크기과 개수, 저장된 데이터 형의 표현도 각기 다르다. 모든 범용 컴퓨터는 기본적으로 동일한 기능을 수행하지만, 기능을 어떤 과정을 거쳐 수행할지는 다를 수 있으며, 이런 차이는 어셈블리어에 반영되게 된다.

게다가 단일 명령 집합에 대해 여러 니모닉과 통사론이 대응될 수 있다. 그런 경우에는 제조사가 만든 문서에서 쓰이는 것이 가장 자주 쓰이게 된다.

출처 : 위키 백과 


프로그램이 만들어질떄에는 코드를 짜고난뒤 컴파일러를 통해 기계어로 변역을 한다음 오브젝트 파일을 만들고 링커를 통해 실행가능한 파일로 만들어 짐니다.

어셈블리어는 컴파일 뒤 과정이기 떄문에 오브젝트 파일을 만들고 링커로 실행가능한 파일을 만듬니다.

이떄 오브젝트 파일로 만들어 주는것이 NASM, TASM, GCC 등 이 있습니다. 주로 NASM이 유명합니다.

어셈블리 프로그래밍을 할떄에는 syscall이라는 것을 사용하여 프로그래밍 합니다. syscall은 32비트와 64비트 마다 다릅니다.

32비트 : http://crasy.tistory.com/73

64비트 : http://crasy.tistory.com/75

또한 리눅스 기준으로 /usr/include/asm/unistd.h  에  정의  되어  있습니다. 


어셈블리어에는 두가지의 문법이 있습니다. 하나는 Intel문법과 at&t문법이 있습니다. 

이 두 문법의 차이는 어셈블리 프로그래밍을 하면서 비교하도록 하겟습니다.


NASM과 GCC를 이용하여 어셈블리 프로그래밍을 해보도록 하겠습니다.

리눅스 기준으로 

데비안 계열 sudo apt-get install gcc nasm

레드헷 계열 sudo yum install gcc nasm 

우선 NASM을 이용하여 프로그래밍을 하겟습니다.

확장자가 asm인 파일을 만들어 주세요


어셈블리 프로그래밍를 할때 가장 중요한것이 자신의 컴퓨터의 버전에 따라 코드가 달라지는것입니다.

컴퓨터에는 레지스터라는 시피유의 기억장소가 있습니다. 이 기억 장소에 값을 저장하고 그것을 연산합니다.

컴퓨터 버전에 따라서 레지스터가 달라지기 떄문에 주의 하셔야 합니다. 

32비트에는 eax, ebx, ecx, edx, edi, esi등이 있습니다. 허나 64비트에는 rax, rbx, rcx, rdx, rdi, rsi 등이 있습니다. 

또한 하위호환이 가능해서 64비트에서는 32비트 레지스터와 16비트 레지스터를 사용 가능합니다.

또한 32비트에서는 16비트 레지스터를 사용 가능합니다.

레지스터에 알맞은 값을 넣어 줘야만 정상적으로 코드가 작동합니다.


또한 pe 구조를 보면 프로그램에는 섹션으로 분리가 되어 있습니다. 

보통 data섹션에는 데이터가 들어가고 text섹션에는 코드가 들어감니다.

어셈블리에서는 변수명 - 자료형 - 데이터 순으로 변수를 만들어 사용할수 있습니다.

데이터 섹션에 들어가며 자료형은 db, dw, dd 등 이 있습니다.

위 코드에서 0x0A는 개행 입니다.


어셈블리에서는 syscall을 사용하는 코드가 시작 하기전 global _start라는 일종의 main함수를 선언해줍니다.

함수가 시작할때에는 : 를 뒤에 붙여서 구분을 해줌니다.

어셈블리에는 코드가 명령어로 구성이 되어 있습니다.  명령어 - 레지스터 및 데이터 값  (OpCode, operand)

또한 명령어는 컴퓨터 버전마다 다르게 나타날 수 도 있습니다.

하나의 syscall에 맞는 레지스터에 값을 넣어 주셧다면 32비트에서는 int 0x80으로 실행을 해주셔야 됨니다. 64비트에서는 syscall로 실행을 합니다.

또한 다 작성하신뒤에는 꼭 종료함수(예 exit)를 사용하여 종료를 해주셔야 합니다.


자 이제 코드에 대한 설명을 했으니 이제 오브젝트 파일을 만들고 실행 가능한 파일을 생성해 봅시다.

그전에 자신의 컴퓨터의 버전을 알아야 합니다. 모르신다면 uname -p로 x86이 나오면 32비트 x86_64면 64비트 입니다.


32비트 

nasm -f elf 파일명.asm

64비트

nasm -f elf64 파일명.asm

으로 알맞게 오브젝트 파일을 만들어 줍니다.

오브젝트 파일은 파일명에 확장자가 .o로 생성 됨니다.

ld 파일명.o -o 아웃풋 파일명

-o 옵션을 통해 자신이 원하는 파일명의 실행가능한 파일을 만들수 있습니다 이 옵션이 없으면 기본적으로 a.out이란 파일이 생성됨니다.


실행 가능한 파일을 만드셧다면 실행을 해보시면 hello_world라는 문자열을 보실 수 있습니다.

 


이제 gcc를 이용한 어셈블리어 프로그래밍을 해보겠습니다.

확장자가 .s인 파일을 만들어 주세요



nasm과 비슷한 부분은 설명을 하지 않겟습니다.

데이터 값, 변수 에는 $이  레지스터에는 %가 앞에 붙어야 합니다. 

또 section 이 생략됨니다. 

AT&T 문법을 사용합니다.





'Development > Assembly' 카테고리의 다른 글

리눅스 syscall table for x86_64  (0) 2014.09.18
리눅스 system table for x86  (0) 2014.09.14
어셈블리어 프로그래밍 helloword  (0) 2014.04.30
Posted by 준P

google io  2015 extended live in Seoul 에서 간단하게 android m 이 공개되었습니다.


android studio 1.3 preview 버전을 설치하면 간단하게 맛볼 수 있는데요


먼저 안드로이드 스투디오를 설치합니다.


https://developer.android.com/sdk/index.html


기존에 설치되어 있으신 분은 그대로 업데이트 하셔서 사용 하시면 됨니다.


setting >Appearance & Behavior > System Settings > Updates 에서 Automatically check updates 를 Canary Chanel 수정 하시고


check update를 하시면 됨니다.


ok로 나가시면 팝업 창으로 업데이트가 있다고 뜰것입니다. 업데이트 및 재시작 를 클릭 하시고 


밑에 사진처럼 다시 설정 창으로 오시면 automatically check updates for Android SDK가 새로 생길것 입니다.


preview channel로 변경하시고 다시 check now를 하시고 업데이트를 해주세요 



업데이트를  끝네시면 android-studio가 1.3버전으로 업데이트 되어 있을겁니다. 안되었을경우 다시 업데이트를 해보세요.





VDC 에서 왼쪽밑 show downladaable system images를 체크해주시면



MNC가 나옴니다. 이 MNC가 android m 입니다.


ABI가 x86인것을 하나만 받으시면 됨니다.



설치중 입니다.



설치를 완료 하시면 새로 가상 장치를 만들어 주세요




장치를 실행 합니다.


부팅 중 






android version 이 M인것을 보실수 있습니다.


이제 안드로이드 M을 빌드 해보겟습니다.


android SDK manager에서 추가로 sdk를 다운받아야 합니다.






minimum sdk를 MNC 로 하시면 됨니다.


이렇게 새 프로젝트를 만드시면 



새로워 보이는 디자인과 hello world가 출력 됨니다.




Posted by 준P

adb 는 android debug bridge 라고 안드로이드와 통신하여 커멘드를 사용하는 클라이언트 - 서버 프로그램 입니다.


adb는 개발 컴퓨터에서 안드로이드의 쉘을 클라이언트에서 호출할수 있습니다. 마치 ssh같이 사용 하실수 있습니다.


또한 앱 설치 및 삭제 관리가 가능 합니다.


adb는 개발 디바이스에서 백그라운드로 실행 됨니다. 


adb는 android sdk의 /platform-tools에 있습니다. 


sdk는 android-studio에 같이 포함 되 있습니다. https://developer.android.com/sdk/index.html


sdk만 받을려면 https://developer.android.com/sdk/installing/index.html 에서 stand-alone sdk tools를 사용하세요


adb는 터미널 혹인 콘솔에서 사용하실수 있습니다.


adb에서 android로 통신을 할려면 장치와 연결해야 합니다만 한장치만 열결되어 있으면 궂이 장치를 지정할 필요가 없습니다.


adb devices 명령어로 디바이스 목록을 보실수 있습니다.


http://developer.android.com/tools/help/adb.html


 카테고리

명령 옵션  

  비교

 디바이스 장치 

 -d

 usb로 연결된 장치로 연결합니다. 2이상 장치가 연결되어 있으면 오류가 남니다.

 -e

 예뮬레이터로 연결을 합니다. 2이상 예뮬이 있으면 오류가 남니다.

 -s <시리얼 번호>

 adb device 명령어로 나온 시리얼 번호로 연결합니다.

기본 명령어  

 devices

 연결된 장치와 시리얼 정보를 알려줍니다.

 help

 도움말을 출력합니다.

 version

adb의 버전을 출력 합니다. 

데이터

 install/uninstall <apk파일 위치> 

 apk파일을 설치 및 제거 합니다.

 pull <장치에서 파일위치> <컴퓨터에 복사할 위치>

 장치에 있는 파일을 컴퓨터로 복사 합니다.

 push <컴퓨터에서 파일 위치> <장치에서의 파일 위치>

 컴퓨터의 파일을 장치로 복사 합니다.
 네트워크 및 포트 

 forward <로컬> <장치>

 임의의 포트 포워딩을 설정 합니다. <자세한건 구글 페이지를 참조해주세여>

 ppp

usb를 통한 ppp연결을 합니다. ppp연결이 자동으로 연결되면 안됨니디ㅏ. 

 스크립트 

 get-serialno

 adb에 시리널 번호 문자열을 출력 합니다.

 get-state

 장치 및 예뮬레이터의 adb상테를 출력 합니다.

 wait-for-device

 장치가 연결되어 있지 않을때 이 옵션을 사용하면 장치를 열결할때까지 기다립니다. 장치가 연결되면 실행 합니다.

 서버 

 start-server

adb 서버를 실행합니다.<서버가 실행되지 않았을 경우에> 

 kill-server

adb 서버를 종료 합니다. <서버가 실행되어 있을 경우에> 

 쉘

 shell

 장치에 쉘에 연결합니다.(ssh처럼)

 shell <명령어>

 장치에 쉘에 ssh처럼 연결하지 않고 명령어를 실행합니다.

디버그 

 logcat <option> <필터 명세서>

 로그 데이터를 화면에 출력 합니다.

 bugreport

 dumpsys, dumpstate 그리고 logcat의 버그 확인을 위해 화면에 출력

jdwp 

 장치에서 사용 가능한 jdwp프로세스의 목록을 출력 합니다.jdwp는 forward를 통해 연결이 가능 합니다.


Posted by 준P

프로그래밍에 있어서 if문 조건문은 매우 중요합니다.


쉘에서 조건문을 사용해보겟습니다.


if 문하고 밑은 then fi 로 마누리 됨니다.


if문 마다 then을 써주셔야하고 if문이 여러개일경우에는 맨 마지막에만 fi를 하시면 됨니다.



if [ 조건 ] 은 대괄호와 문자 및 조건식사이마다 띄워쓰기가 있어야 합니다.


if test로 if [ 조건 ] 문을 대신할수 있습니다.



결과는 똑같습니다.


if문에는 else문이 꼭 있습니다.


else문에는 then이 필요 없습니다.



else하고 if문을 또 사용 할수 있지만 


elif 라고 줄여 사용할수 있습니다.


elif문에는 then이 필요 합니다.





조건식에는 여러 가지가 잇습니다.


다른 프로그래밍 언어와 다름니다.



문자열 비교  

 결과 

 "문자열" = "문자열"

 두문자열이 같으면 참 

 "문자열 != "문자열"

 두 문자열이 다르면 참

 -n "문자열"

문자열이 null이 아니면 참 

-z "문자열" 

문자열이 null이면 참 

산술 비교  

 

 수식1 -eq 수식2

 두 수식이 같으면 참

 수식1 -ne 수식2

두 수식이 다르면 참

 수식1 -gt 수식2

 수식1 이크면 참

 수식1 -ge 수식2

수식1 이 크거나 같으면 참

 수식1 -lt 수식2

수식1 이 작으면 참

 수식1 -le 수식2

수식1 이 작거나 같으면 참

 !수식

 수식이 거짓이면 참 


Posted by 준P

쉘 스크립트는 다양한 방면에서 쓸모가 많습니다.


c언어와 유사하게 만들수도 있으며 컴파일이 필요 없고 텍스트 애서 바로 실행이 가능합니다.


일단 기본적으로 쉘스크립트를 사용할려면 파일확장자가 sh이어야 합니다.


또한 맨위에 #!/bin/sh 가 있어야 합니다.


저는 일단 vim으로 hell.sh파일을 만들어서 hello_hell을 뛰우겟습니다.




저장



sh로 실행이 가능한데요


바로 ./ 를 이용하여 실행이 불가능한 이유는 실행권한이 없기떄문 입니다.


따라서 실행권한을 추가 해주어야 합니다.


chmod +x 파일명 으로 실행권한을 주시면됨니다.



실행 권한을 주면 다시 줄필요가 없습니다.


이재 변수 사용 방법을 알려드리겟습니다.


쉘에서는 기본적으로 모두 문자열로 처리 합니다.


숫자라 하여도 문자열로 인식이 된다는 것이죠


변수는 c언어 처럼 선언 문은 없습니다.


변수 a를 사용하고 싶다면 a=hello_hell


처럼 사용 하시면 됨니다.


변수는 대소문자를 구분합니다.


대입을 할떄 =사이에 공백이 있으면 안됨니다.


만약 숫자처럼 사용 하시고 싶으시면 expr로 변환 해주시면 됨니다.


그런데 사용하기전 ` 으로 덮어 주셔야합니다.


숫자키중 1왼쪽에 있는 특수문자 입니다.



123 에 123을 더하므로 246 이되어야 합니다.



정상적으로 되었습니다.


이제 파라미터 변수를 알려드리겟습니다.


파라미터 변수는 명령어의 파라미터를 말합니다.


명령어로 알려드린다면 



 yum

-y 

install 

vim 

 $0

$1 

$2 

$3 



로 나누어 짐니다.


$0는 함수명이됨니다.(파일명)

$1은 첫 파라미터 

$2는 두번쨰 파라미터

...해서 진행됨니다.


$* 으로 전체 파라미터를 볼수 있습니다.





이렇게 사용 할 수 있습니다.


이제 입력하는 방법을 알려드리겟습니다.


입력은 read라는 함수로 가능합니다.


read 변수


read를 사용 할때 $문을 사용하면 안됨니다.



입력받은것을 출력하는 간단한 스크립트 입니다.



정상적으로 출력 됨니다.


출력하는 방법충 echo말고도 c언어의 pritnf 를 사용할수 있습니다.


허나 방법이 살짝 다름니다.


소괄호가 없습니다.





Posted by 준P

http://www.jetbrains.com/pycharm/download/


에들어가시면 다음과 같이 pychram이 있습니다.


커뮤니티 버전을 다운로드 해주세요


오른쪽거 



설치는 간단하게 스킵



실행중 



프로젝트 단위로 관리할수 있습니다.



여기에 간단히 코드를 집어 넣고 컴파일 할수 있습니다.


alt+shift+f10으로 컴파일 가능하고 오른쪽위에 재생버튼으로도 가능합니다.



Posted by 준P

JSP는 웹서버와 함계 있어서 html 문법이 사용가능하고요 


여러번 뛰어서 작성해도 데이터가 사라지거나 하지 않습니다.


문법  

명칭 

설명 

<%! 자바코드%>  

선언문 

클래스 범위 변수 또는 메서드 선언 사용하지 않는것이 좋다. 

 <% 자바코드 %>

스크립트릿 

지역변수 또는 일반 자바코드 

<%=변수명%> 

표현식 

변수값 출력 

<%-- 주석 --%>  

주석  

JSP소스보기에서 출력되지 않음 

//주석 

주석 

스크립트내의 한주주석 

 /* 주석 */ 

주석 

스크립트내의 여러줄 주석 


데이터 타입은 일반 자바와 비슷합니다.


타입  

 데이터 

 크기

기본값 

범위 

 

 boolean

 참 거짓

 1byte

 false

 true, false

 byte

 정수 

 1byte

 0

 -128~127

 char

 문자 

 2byte

 \u0000

 자바에서 지원하는 모든유니코드 0~65535

 short

 정수 

 2byte

 0

 -32768~32767

 int

 정수 

 4byte

 0

 -2147483648~2147483647

 long

 정수

 8byte

 0

 -9223372036854775808~9223372036854775807

 float

 실수 

 4byte

 0.0

 32비트 -3.4E38~3.4E38

 double

 실수 

 8byte

 0.0

64비트 1.7E308~1.7E308 


'Development > JSP' 카테고리의 다른 글

JSP)tomcat8 설치  (0) 2014.10.01
JSP) tomcat설치와 관리 유저 설정  (0) 2014.09.28
Posted by 준P

JSP)tomcat8 설치

tomcat 8은 2014년 9월즈음에 나온 최신 버전이다.


tomcat8 은 명령어로 설치 되지 않는다. 명령어로 설치를 하면 tomcat7버전이 설치 된다.


따라서 우리는 tomcat 홈페이지에서 다운받은 다음에 설치를 해야한다.


http://apache.tt.co.kr/tomcat/tomcat-8/


위링크로 가서 최신버전을 다운로드 하자


최신버전을 클릭후 src 로 들어가면 zip또는tar.gz 파일이 있다. 둘중 하나만 다운로드 하자


다운로드를 끝나면 앞축해제를 한다음 적절한 이름으로 변경후 /opt폴더로 이동시키자



폴더안의 내용은 다음과 같다.


bin 폴더를 가서 startup.sh를 실행한다.(windows 의경우 startup.bat)


참고로 관리자권한으로 실행해야 한다. root


그러면 명령어가 실행되고 


localhost:8080에들어가면 다음과 같이 정상적으로 뜬다.


'Development > JSP' 카테고리의 다른 글

JSP) JSP 기본 문법 및 데이터 타입  (0) 2014.10.01
JSP) tomcat설치와 관리 유저 설정  (0) 2014.09.28
Posted by 준P

JSP를 사용하기위해서는 tomcat과 jdk 가 설치 되어 있어야합니다.


JDK설치 


http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSiteId=ocomen


에 들어가서 jdk를 클릭하신뒤에 설치하시면됨니다.(설치방법 생략)


tomcat 설치


레드헷 계열


sudo yum -y install tomcat


sudo yum -y install tomcat-webapps tomcat-admin-webapps


우분투 계열


sudo apt-get install tomcat


sudo apt-get install tomcat-webapps 


를 하여 tomcat를 설치한다.


이제 jsp에서 관리자를 설정할려면 


cd /usr/share/tomcat/conf


sudo vim tomcat-users.xml에가서 



맨 마지막 <-- <user name="admin" password="adminadmin" roles="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" />-->

부분의 주석을 제거한다. 



그러면 관리자 id가 admin 비번이 adminadmin인데 자신이 쓰고싶은 아이디와 비번으로 수정하면 된다.


그리고 


sudo service tomcat start


명령어를 통해 tomcat를 실행한다.


그리고 localhost:8080를 웹브라우져를 통해 들어간다.


tomcat은 8080 을 기본 포트로 사용하고 있습니다.




tomcat이 정상적으로 설치가 완료되었습니다.


'Development > JSP' 카테고리의 다른 글

JSP) JSP 기본 문법 및 데이터 타입  (0) 2014.10.01
JSP)tomcat8 설치  (0) 2014.10.01
Posted by 준P

lib 파일은 dll 파일에서 함수를 연결(link)시켜주는 파일입니다.


dll 파일을 사용한다면 lib로 간단하게 링크할수 있습니다.


일단 응용 프로그램을 만들겟습니다. 저는 콘솔로 만들었습니다.



이름은 DLLPROJECTEXELIB로 하엿습니다.



다음으로 넘어가 주시고요 




빈프로젝트를 선택해주시고 마치시면 됨니다.


다음과 같이 입력해주세요 (함수명은 자신이 만들었던 함수명을 지정해주셔야 합니다.





프로젝트 - 속성- 구성 속성 - 링커 - 일반 - 추가 라이브러리 디렉터리 에서 dll파일을 만들었을떄 나온 lib 파일의 위치를 지정해 줌니다.


참고로 dll 파일 이름은 lib 파일명과 같기 떄문에 dll 파일의 이름을 수정하셧다면 lib파일명도 수정하셔야 합니다.



그리고 입력으로 가셔서 lib 파일의 파일명을 추가해주세요


그리고 마지막으로 dll파일을 exe파일 폴더내로 이동시켜주세요 


dll 파일의 위치를 찾지못해서 에러가 남니다.


참고로 exe를 배포할떄 dll파일도 같이 배포해야합니다.


lib파일은 같이 배포 할 필요가 없습니다.


그리고 실행해보면 밑과 같이 뜸니다.



Posted by 준P

저번에 dll함수를 만들어 보았습니다.


이번에는 그 dll 파일을 사용해 보는 것입니다.


새프로젝트를 만들겟습니다.



저는 콘솔을용 프로그램에서 만들었습니다.


프로젝트명은 DLLPROJECTEXE로 하였습니다.



다음으로 넘어 가줌니다.



콘솔응용프로그램을 선택하고 저는 추가 옵션으로 빈프로젝트를 선택하였습니다.


마치신 다음에 cpp파일을 만드신후에 다음과 같이 입력합니다.



제가 사용한 dll의 hell_func는 단순이 전달받은 두 인자 값의 곲을 리턴해주는 dll 파일 입니다.


Posted by 준P