현재 DevX강좌를 보면서, 윈도우시스템을 어셈블리를 사용해서 알아가는것이라는 것은 자명한 일이다.
아! 이렇게 운영되고 있군.! 하지만, 이것은 현재 다른 언어에서는 기본에도 속하지 않는 부분인데??
라는 생각을 하게 된다.(적어도 나는.....)
그렇다면, 잠시 눈을 돌려보는것이 어떨까? 바로, 우리와 환경이 틀린 외국에서는 어떻게 생각하고
어느정도 진척이 되었는지 말이다.
먼저 기본적인 어셈블리 개발환경을 살펴보자. 본인이 10여년전으로 기억하는데 그때 벌써 어셈블리
개발환경을 C++빌더와 유사하게 만들자는 프로젝트가 있었다. 이름하여, Visual Assembler였다.
버전은 0.9까지 나왔었고, 본인 또한 약간의 참여를 하고 있었다. 델파이와 유사하게 사용하는것이
취지였다. 에디트와 같은 공통 컨트롤을 랩핑하여 단순히 다이얼로그위에 드롭하면 코드조각(Sinppet)
들이 자동으로 붙여넣기 하는 식이였다. 이런방식은 현재에도 여러가지 IDE들에서도 반영되고있다.
위의 사이트에서도 알다시피(http://www.masm32.com) IDE에도 여러가지 시도가 현재까지 이어지고있다.
DevX에서도 사용하는 WinAsm IDE역시 그중 하나이다. 다시한번 말하지만 WinAsm IDE를 선택한것은
여러가지 이유가 있다. 첫번째로 파란색을 좋아하는 본인의 취향이다!! 두번째로는 IDE중에 써본중 가장
강력하고 편했던것이 MS VC6.0 이였다. VC와 같은 단축키와 기능을 구현했다. 물론 어셈블리를 사용해서
만들었으므로, 로딩속도와 크기는 따라오지 못한다. WinAsm은 내부적으로 HiEditor라는 에디트컨트롤의
기능 보강판을 자체적으로 개발했다. 나머지 프레임부분은 Win32 API로 그냥 제작한 것이다.
문법강조기능 부터 북마크 기능 등을 모두 개발했고, 자체 소스또한 공개했다. 본인또한 델파이로
어셈블리 IDE를 잠시 만들었었다. 프로젝트기능에 WinDbg로 디버깅과 간단한 리소스에디터까지
하지만, 역시 어셈블리로 만들어야 제맛이라고 생각해서 아직 보류중에 있다.........
RadAsm은 비주얼어셈블리의 후손에 가깝다. 그쪽 개발진들이 몇이서 다시 만든것이다.
어셈블러에는 MASM, NASM, TASM, FASM등이 있고, 각 플랫폼에 맞는 어셈블러들도 존재한다. 어셈블러마다 문법도 틀리고 지시어도 다 틀리다. 하지만 MASM을 택한 이유는 궂이 설명안해도 아리라 생각한다.
여하튼, 이렇게 많은 어셈블러를 다 지원하쟈는 취지가 RadAsm이다. 덩치도 상당하다. 단지 FrontEnd에
속하지만(어셈블러와는 별도라는 얘기) 상당히 복잡하게 생겼다. 역시 본인이 RadAsm의 한국어판을
재미로 만들어서 제공했었고, 현재에도 Korean이라고 되어있을 것이다.
그렇지 않아도 어려운 어셈블러를 이것저것 다루는것은 아직은 무리다. 그래서 WinAsm을 택했다.
EasyCode라는 개발환경은 흡사 비주얼베이직을 보는것과 같은 착각을 불러일으킨다. 모두아직 베타단계
에 머문다. 적어도 내가 보기엔 베타수준이다. 가장 완성도 높은게 WinAsm Studio이다......
현재 WinAsm Studio의 한글화 UI와 내부 도움말의 번역도 현재 80%진행상태이다. 우리는 무조건
WinAsm Studio로 끝장을 봐야한다. DevX가 완료될 즈음에 완전한 우리에게 맞는 IDE가 탄생할 것이다.
여러분의 도움으로 말이다.........
참고로 FASM이라는 어셈블러가 있다. 이놈은 참 특이한 놈이다. 지금부터 잠시 FASM에 대한 얘기를
하려한다. Flat Assembler라는 게 정식명칭이다. WinAsm Studio에도 FASM의 소개가 있다.
어셈블러에서는 바이블이 몇개 있다. 피터아벨이 쓴 어쩌구 저쩌구.... 하지만 본인은 랜달하이드가
쓴 매크로어셈블러 바이블 6.0 (인포북. 현재 절판된지 오래됨)을 바이블로 생각한다. 이 저자가
고수준 어셈블러를 만드는데는 선구자이다. HLA라는 새로운 어셈블러도 만들었다. 바로 OOP적인것이
보강된 어셈블러이다. OOP는 한마디로, 논리적인 것이다. 물리적인 부분을 일률적으로 만들고 거기다가
은폐, 상속, 다형성.....등을 붙여놓은것이다. 어셈블러입장에서는 별것도 아니다. 여하튼, 이사람이
어셈블러를 제작 할수 있는 가이드도 만들었다. 어셈블러도 어셈블리언이 보면 별것아니다. 단지
법칙과 알아야할 것들이 많은 법칙서와 같은 것이기 때문이다. 그래서 FASM이 탄생했다.
MASM과 유사한 문법체계와 어셈블리에서 중요요소인 어셈블러와링커그리고 라이브러리등이 모두
FASM.exe파일로 되어있고, 에디터는 프로젝트 기능만 추가해놓은 상태이며, 상당히 가볍고 빠르다.
ASM SDK로 여러분만의 어셈블러도 만들수 있다. 하지만 무모하다. 어셈블리에서 한분야는 상당한
깊이를 요하므로, 이것을 파고들면 산을 보지 못한다. 있다는것만 알아두기 바란다.
FASM은 Embbed쪽에서 강세를 보인다. 내장하기 쉽고, 문법이 간단 명료하기 때문이다.....
그럼 왜? FASM으로 안했냐고? 에디터가 아직 정식으로 2바이트 언어를 지원하지 않는다. 즉 한글을
못쓴다는 얘기다. 수차례 변경 메일을 보냈으나 반영안되고 있다. 본인이 마음대로 고치지도 못하는
라이센스라 더 애매하다. 여하튼...............
왜 FASM얘기를 하느냐하면, http://www.menuetos.net 라는 사이트를 방문해보기 바란다. 혹시나 눈치챘는가? 그렇다 바로 완전 100% 어셈블리로 운영체제를 만들었다. 그것도 GUI기반의 운영체제
이다. 어셈블리를 하다보면 간단한 에디터와 게임과 네트워크 데이터베이스를 구현할 수 있다는 것을
알 수 있다. 이것을 집대성해서 OS까지 만든것이다. 어셈블리의 장점을 아는가? 작고 빠르다이다.
GUI를 포함하는 완젼한 32/64bit 운영체제이며, 단지 1.44메가 디스켓 한장으로 구동된다.
현재 07.1.23일판 v0.84버전의 크기는 638KB이다. 예전 macOS가 도스가 판칠 무렵 GUI를 내장하고
비슷한 크기로 나왔었다. 이유를 알 수 있겠는가?? 뭘로 개발했는지를.............
미뉴엣OS가 어셈블리환경이라고 생각하면 오산이다. OS이므로 그위에 C++이나 자바같은것을 실장할수
있다. 어셈블리의 완결판이라 볼 수 있다.. 소스도 공개되어있다. 부트로더와 커널과 여러가지를
배우기에는 최고로 생각한다. 자체적인 API를 제공한다. 하지만 이모든것이 DevX와 유사한 내용일색이다.
시간나면 한번 설치해보기 바란다. 디스켓이미지를 WinImage와 같은것으로 덮어쓰고 부팅하면 된다.
아직은 OS라 보기에는 힘들것이다. 하지만, 기능적으로는 완성상태이다. 시작버튼도 있고, 환경설정창에
커맨드상에서 FASM을 실행해서 새로운 어플리케이션을 제작할 수 도 있다..
간혹 이런생각을 해본다. MS-DOS에서 윈도우로 전환할때 C로 개발하지 않고 어셈블리로 개발을
계속했다면 현재 비스타는 어떤모습일까?? 따라올 자가 없었을것이다. MS의 어셈블리소스들을 보면
가히 정석의 기법을 구사한다. 하기야 돈많은 회사에서 머리좋은 사람들을 고용하는것은 당연지사..
간단히 주저리 주저리 말한것은 바로 이것이다. 여러분이 시스템과 어셈블리를 배워가면서 목표가
어지중간하다면, 미뉴엣OS를 한번 보기 바란다. 현재 Win32환경에 있는 모든 어플들을 이것으로
포팅할 수 있다면? 본인생각에 프로그래밍 강국의 대한민국이 탄생할 것이다............
모든 개발자들이 어셈블리언이라면, 아마 어느나라도 못따라오는 기술강국이 될 것이다. 현재 우리는
이런 현실을 외면하고있다. 단순히 시간에 쫒겨서 프로젝트를 급조하고 왜 쓰는지도 모르는 컴포넌트와
ActiveX를 무작정 끼워서 조립하고 있다. 살펴볼 시간이 없다라는 명목으로 말이다...........
어셈블리를 익혀가면서 간혹 힘들다면, 반드시 이런 시련은 누구나 겪게된다. 그럴땐 이렇게 완성작을
살펴보든가, 다른사람의 소스를 보는것으로 위안을 삼는 버릇(??)을 두자. 일종의 최면이다. 이최면이
일정시간 지난후 자신을 돌아보기 바란다. 자기도 모르게 .386 .model~ 같은 손가락이 먼저 움직이고
있을 것이며, 어떠한 프로그램을 보는 관점 자체가 틀릴 것이다.
시작-> 실행 -> notepad 라고 실행하면 나타나는 단순한 메모장을 그냥 에디터로 보지않고
Getmodulehandle로 인스턴스를 받아서 WM_CREATE에서 에디트를 생성하고 메세지루프에 들어가서
입력을 대기하며, 메뉴를 눌렀을때는 WM_COMMAND에서 wParam을 분석해서 어떤 프로시져로
분기하는구나.................... 이런저런 분석의 각도가 틀리다. 당연한 수순이지만? 그 기능을 바꿀려면
정확히 어디를 고쳐야하는지도 이미 알고있다. A키를 누르면 B가 찍히게 만들어 버릴 수 도있고,
저장하기 를 누르면 코드값에 모두 + 2를 해서 간단한 암호화를 시켜버릴 수 도있음을 알게 된다...
만약에 메모장이 실행될때 시리얼을 입력해서 정품사용자를 가린다면??? 디버거와 헥사에디터만 있다면
얼마든지 깨트릴수 있음을 알 수 있는가??? 바로 정품이 아니라면 나타는 메세지박스의 점프한 곳에서
살펴보면, 분명히 입력한 값과 정품을 비교하는 CMP문이나 TEST JE JNE와 같은 코드가 나타날것이다.
그부분을 살펴서 바꾸면?? 정품사용자가 된다... 또한 비교문 이전에는 분명 정품코드를 분석하는
루틴이 있다. 그부분을 꺼구로 작동시키면??? 바로 시디키 생성기도 만들어버릴 수 있는 것이다.......
방금 크랙킹의 원리를 설명했다.. 나머지도 대동소이할 것이다..............
자, 힘들고 배우기 어려운가? 그럴땐 이렇게 막연하지만 할 수 있는것들에 대한 기대를 해보기 바란다.
스스로 구해서 얻은것이 가장 값지다는 것을 느껴보기 바란다..... 본인은 거기에 약간의 도움을
제공하는 것에 지나지 않는다. 모두 열심히 화이팅을 외치며, Small is Beautiful!! 어셈블리의 모토이다.
작은 물방울이 모여서 바다를 이룬다는것이 좋치아니한가.............
아! 이렇게 운영되고 있군.! 하지만, 이것은 현재 다른 언어에서는 기본에도 속하지 않는 부분인데??
라는 생각을 하게 된다.(적어도 나는.....)
그렇다면, 잠시 눈을 돌려보는것이 어떨까? 바로, 우리와 환경이 틀린 외국에서는 어떻게 생각하고
어느정도 진척이 되었는지 말이다.
먼저 기본적인 어셈블리 개발환경을 살펴보자. 본인이 10여년전으로 기억하는데 그때 벌써 어셈블리
개발환경을 C++빌더와 유사하게 만들자는 프로젝트가 있었다. 이름하여, Visual Assembler였다.
버전은 0.9까지 나왔었고, 본인 또한 약간의 참여를 하고 있었다. 델파이와 유사하게 사용하는것이
취지였다. 에디트와 같은 공통 컨트롤을 랩핑하여 단순히 다이얼로그위에 드롭하면 코드조각(Sinppet)
들이 자동으로 붙여넣기 하는 식이였다. 이런방식은 현재에도 여러가지 IDE들에서도 반영되고있다.
위의 사이트에서도 알다시피(http://www.masm32.com) IDE에도 여러가지 시도가 현재까지 이어지고있다.
DevX에서도 사용하는 WinAsm IDE역시 그중 하나이다. 다시한번 말하지만 WinAsm IDE를 선택한것은
여러가지 이유가 있다. 첫번째로 파란색을 좋아하는 본인의 취향이다!! 두번째로는 IDE중에 써본중 가장
강력하고 편했던것이 MS VC6.0 이였다. VC와 같은 단축키와 기능을 구현했다. 물론 어셈블리를 사용해서
만들었으므로, 로딩속도와 크기는 따라오지 못한다. WinAsm은 내부적으로 HiEditor라는 에디트컨트롤의
기능 보강판을 자체적으로 개발했다. 나머지 프레임부분은 Win32 API로 그냥 제작한 것이다.
문법강조기능 부터 북마크 기능 등을 모두 개발했고, 자체 소스또한 공개했다. 본인또한 델파이로
어셈블리 IDE를 잠시 만들었었다. 프로젝트기능에 WinDbg로 디버깅과 간단한 리소스에디터까지
하지만, 역시 어셈블리로 만들어야 제맛이라고 생각해서 아직 보류중에 있다.........
RadAsm은 비주얼어셈블리의 후손에 가깝다. 그쪽 개발진들이 몇이서 다시 만든것이다.
어셈블러에는 MASM, NASM, TASM, FASM등이 있고, 각 플랫폼에 맞는 어셈블러들도 존재한다. 어셈블러마다 문법도 틀리고 지시어도 다 틀리다. 하지만 MASM을 택한 이유는 궂이 설명안해도 아리라 생각한다.
여하튼, 이렇게 많은 어셈블러를 다 지원하쟈는 취지가 RadAsm이다. 덩치도 상당하다. 단지 FrontEnd에
속하지만(어셈블러와는 별도라는 얘기) 상당히 복잡하게 생겼다. 역시 본인이 RadAsm의 한국어판을
재미로 만들어서 제공했었고, 현재에도 Korean이라고 되어있을 것이다.
그렇지 않아도 어려운 어셈블러를 이것저것 다루는것은 아직은 무리다. 그래서 WinAsm을 택했다.
EasyCode라는 개발환경은 흡사 비주얼베이직을 보는것과 같은 착각을 불러일으킨다. 모두아직 베타단계
에 머문다. 적어도 내가 보기엔 베타수준이다. 가장 완성도 높은게 WinAsm Studio이다......
현재 WinAsm Studio의 한글화 UI와 내부 도움말의 번역도 현재 80%진행상태이다. 우리는 무조건
WinAsm Studio로 끝장을 봐야한다. DevX가 완료될 즈음에 완전한 우리에게 맞는 IDE가 탄생할 것이다.
여러분의 도움으로 말이다.........
참고로 FASM이라는 어셈블러가 있다. 이놈은 참 특이한 놈이다. 지금부터 잠시 FASM에 대한 얘기를
하려한다. Flat Assembler라는 게 정식명칭이다. WinAsm Studio에도 FASM의 소개가 있다.
어셈블러에서는 바이블이 몇개 있다. 피터아벨이 쓴 어쩌구 저쩌구.... 하지만 본인은 랜달하이드가
쓴 매크로어셈블러 바이블 6.0 (인포북. 현재 절판된지 오래됨)을 바이블로 생각한다. 이 저자가
고수준 어셈블러를 만드는데는 선구자이다. HLA라는 새로운 어셈블러도 만들었다. 바로 OOP적인것이
보강된 어셈블러이다. OOP는 한마디로, 논리적인 것이다. 물리적인 부분을 일률적으로 만들고 거기다가
은폐, 상속, 다형성.....등을 붙여놓은것이다. 어셈블러입장에서는 별것도 아니다. 여하튼, 이사람이
어셈블러를 제작 할수 있는 가이드도 만들었다. 어셈블러도 어셈블리언이 보면 별것아니다. 단지
법칙과 알아야할 것들이 많은 법칙서와 같은 것이기 때문이다. 그래서 FASM이 탄생했다.
MASM과 유사한 문법체계와 어셈블리에서 중요요소인 어셈블러와링커그리고 라이브러리등이 모두
FASM.exe파일로 되어있고, 에디터는 프로젝트 기능만 추가해놓은 상태이며, 상당히 가볍고 빠르다.
ASM SDK로 여러분만의 어셈블러도 만들수 있다. 하지만 무모하다. 어셈블리에서 한분야는 상당한
깊이를 요하므로, 이것을 파고들면 산을 보지 못한다. 있다는것만 알아두기 바란다.
FASM은 Embbed쪽에서 강세를 보인다. 내장하기 쉽고, 문법이 간단 명료하기 때문이다.....
그럼 왜? FASM으로 안했냐고? 에디터가 아직 정식으로 2바이트 언어를 지원하지 않는다. 즉 한글을
못쓴다는 얘기다. 수차례 변경 메일을 보냈으나 반영안되고 있다. 본인이 마음대로 고치지도 못하는
라이센스라 더 애매하다. 여하튼...............
왜 FASM얘기를 하느냐하면, http://www.menuetos.net 라는 사이트를 방문해보기 바란다. 혹시나 눈치챘는가? 그렇다 바로 완전 100% 어셈블리로 운영체제를 만들었다. 그것도 GUI기반의 운영체제
이다. 어셈블리를 하다보면 간단한 에디터와 게임과 네트워크 데이터베이스를 구현할 수 있다는 것을
알 수 있다. 이것을 집대성해서 OS까지 만든것이다. 어셈블리의 장점을 아는가? 작고 빠르다이다.
GUI를 포함하는 완젼한 32/64bit 운영체제이며, 단지 1.44메가 디스켓 한장으로 구동된다.
현재 07.1.23일판 v0.84버전의 크기는 638KB이다. 예전 macOS가 도스가 판칠 무렵 GUI를 내장하고
비슷한 크기로 나왔었다. 이유를 알 수 있겠는가?? 뭘로 개발했는지를.............
미뉴엣OS가 어셈블리환경이라고 생각하면 오산이다. OS이므로 그위에 C++이나 자바같은것을 실장할수
있다. 어셈블리의 완결판이라 볼 수 있다.. 소스도 공개되어있다. 부트로더와 커널과 여러가지를
배우기에는 최고로 생각한다. 자체적인 API를 제공한다. 하지만 이모든것이 DevX와 유사한 내용일색이다.
시간나면 한번 설치해보기 바란다. 디스켓이미지를 WinImage와 같은것으로 덮어쓰고 부팅하면 된다.
아직은 OS라 보기에는 힘들것이다. 하지만, 기능적으로는 완성상태이다. 시작버튼도 있고, 환경설정창에
커맨드상에서 FASM을 실행해서 새로운 어플리케이션을 제작할 수 도 있다..
간혹 이런생각을 해본다. MS-DOS에서 윈도우로 전환할때 C로 개발하지 않고 어셈블리로 개발을
계속했다면 현재 비스타는 어떤모습일까?? 따라올 자가 없었을것이다. MS의 어셈블리소스들을 보면
가히 정석의 기법을 구사한다. 하기야 돈많은 회사에서 머리좋은 사람들을 고용하는것은 당연지사..
간단히 주저리 주저리 말한것은 바로 이것이다. 여러분이 시스템과 어셈블리를 배워가면서 목표가
어지중간하다면, 미뉴엣OS를 한번 보기 바란다. 현재 Win32환경에 있는 모든 어플들을 이것으로
포팅할 수 있다면? 본인생각에 프로그래밍 강국의 대한민국이 탄생할 것이다............
모든 개발자들이 어셈블리언이라면, 아마 어느나라도 못따라오는 기술강국이 될 것이다. 현재 우리는
이런 현실을 외면하고있다. 단순히 시간에 쫒겨서 프로젝트를 급조하고 왜 쓰는지도 모르는 컴포넌트와
ActiveX를 무작정 끼워서 조립하고 있다. 살펴볼 시간이 없다라는 명목으로 말이다...........
어셈블리를 익혀가면서 간혹 힘들다면, 반드시 이런 시련은 누구나 겪게된다. 그럴땐 이렇게 완성작을
살펴보든가, 다른사람의 소스를 보는것으로 위안을 삼는 버릇(??)을 두자. 일종의 최면이다. 이최면이
일정시간 지난후 자신을 돌아보기 바란다. 자기도 모르게 .386 .model~ 같은 손가락이 먼저 움직이고
있을 것이며, 어떠한 프로그램을 보는 관점 자체가 틀릴 것이다.
시작-> 실행 -> notepad 라고 실행하면 나타나는 단순한 메모장을 그냥 에디터로 보지않고
Getmodulehandle로 인스턴스를 받아서 WM_CREATE에서 에디트를 생성하고 메세지루프에 들어가서
입력을 대기하며, 메뉴를 눌렀을때는 WM_COMMAND에서 wParam을 분석해서 어떤 프로시져로
분기하는구나.................... 이런저런 분석의 각도가 틀리다. 당연한 수순이지만? 그 기능을 바꿀려면
정확히 어디를 고쳐야하는지도 이미 알고있다. A키를 누르면 B가 찍히게 만들어 버릴 수 도있고,
저장하기 를 누르면 코드값에 모두 + 2를 해서 간단한 암호화를 시켜버릴 수 도있음을 알게 된다...
만약에 메모장이 실행될때 시리얼을 입력해서 정품사용자를 가린다면??? 디버거와 헥사에디터만 있다면
얼마든지 깨트릴수 있음을 알 수 있는가??? 바로 정품이 아니라면 나타는 메세지박스의 점프한 곳에서
살펴보면, 분명히 입력한 값과 정품을 비교하는 CMP문이나 TEST JE JNE와 같은 코드가 나타날것이다.
그부분을 살펴서 바꾸면?? 정품사용자가 된다... 또한 비교문 이전에는 분명 정품코드를 분석하는
루틴이 있다. 그부분을 꺼구로 작동시키면??? 바로 시디키 생성기도 만들어버릴 수 있는 것이다.......
방금 크랙킹의 원리를 설명했다.. 나머지도 대동소이할 것이다..............
자, 힘들고 배우기 어려운가? 그럴땐 이렇게 막연하지만 할 수 있는것들에 대한 기대를 해보기 바란다.
스스로 구해서 얻은것이 가장 값지다는 것을 느껴보기 바란다..... 본인은 거기에 약간의 도움을
제공하는 것에 지나지 않는다. 모두 열심히 화이팅을 외치며, Small is Beautiful!! 어셈블리의 모토이다.
작은 물방울이 모여서 바다를 이룬다는것이 좋치아니한가.............