티스토리 뷰
32비트 모듈을 작성 할 때 급하거나 떄론 귀찮아서 inline __asm 을 이용하어 코딩을 한다.
asm을 바로 쓸 수 있기에 해당 방식을 많이 사용한다.
하지만 이제 64비트 시대 아닌가!!
그리고 고객사에서 점점 64비트 전용 프로그램들을 지원하기 시작하면서 난관에 봉착하기에 이른다.
그것은 바로!!
Microsoft Visual Studio 에서는 64bit 컴파일러에서 inline __asm 코드를 더이상 지원 하지 않는다!!
참고 : http://msdn.microsoft.com/en-us/library/wbk4z78b(VS.80).aspx 그럼 이제 우리는 더 이상 asm을 사용할 수 없는것인가? 절대 그렇지 않다!! 분명한것은 인라인 어셈을 이용하지 못하도록 하고 있는것이지 asm을 사용하지 못하도록 하는 것은 아니다. MS Visual Stuio에서는 MASM이라는 방식을 사용하도록 권고 하고 있다. 그럼 우리는 아래와 같이 정리 할 수 있다. 1. C/C++ 소스에서 인라인 어셈을 사용하지 못한다. 2. 그런데 어셈을 이용하여 프로그램은 만들 수 있다. 3. 결국 각자 따로 만들면 이상이 없다는 것이다. |
우리는 프로그램을 만들 때 컴파일을 하고 링크 과정을 한다.
그렇다!! lib로 만들어서 링크를 하면 되는 것이다. 즉 DLL 이던 LIB던 라이브러리 형태로 asm을 사용 하면 된다!!
이제 그 방법을 알아보자!!
우선 소스코드상의 모든 ASM 코드를 별도의 XXX.asm 파일에 넣고 함수화 시킨다.
.code
CeckMyDebugger PROC
mov eax, fs:[30h] ;
mov eax, [eax + 2h] ;
ret ;
CheckMyDebugger ENDP
End
이렇게 함수화 시킨 후 32비트에서 사용하던 레지스터들을 64비트에 맞추어서 변경해준다.
.code
CeckMyDebugger PROC
mov rax, gs:[60h] ;
mov rax, [rax + 2h] ;
ret ;
CheckMyDebugger ENDP
End
자 이제 준비가 다 되었다.
우리는 LIB파일로 만들어서 링크 과정에서 해당 함수를 링크 할 것이다.
우선 어셈 파일을 동적으로 빌드 한 후 자동으로 링크 할 수 있도록 하자
그런데 어떻게?? 빌드를 할 수 있을까!!
MASM!! 이 방식이다.
1.
우선 XXX.ASM 파일을 선택 한다.
이와 같이 빌드에서 제외 옵션은 "아니요" 을 선택한다.
이유는 동적으로 동시에 빌드 되기 위해서 이다.
도구는 "사용자 지정 빌드 도구"이다. 절대 MS ASM 계열을 선택 해서는 않된다!! 명심하자!!
이제 사용자 지정 빌드 단계 옵션중 일반 탭을 선택하여 빌드를 할 수 있게 도와주는 옵션 및 파일을 선택 해야한다.
MS VisualStudio 2005 이상에서는 MASM을 사용 할 수 있도록 ML.EXE을 기본 제공하고 있다.
하지만 우리는 64비트를 사용해야 함으로 ML64.EXE을 사용한다.
Visual Studio 2005 기준
명령줄 : "C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin\x86_amd64\ml64" /c /Cx vrdet.asm
이렇게 하면 준비는 완료 되었다.
빌드를 하게 되면 빌드는 잘 될 것이다.
이상 끝이 났다!! ASM 코드는 열심히 공부해서 사용하도록하자 !!
- Total
- Today
- Yesterday
- 블루버블
- C#
- Windows
- 제주도
- 티스토리챌린지
- 서귀포
- 윈도우
- DLL
- 외돌개
- OpenSource
- 블루버블다이빙팀
- CMake
- 스쿠버 다이빙
- C++
- 서귀포블루버블
- C#.NET
- ip
- 울릉도
- script
- 블루버블다이브팀
- 현포다이브
- 암호화
- 패턴
- 성산블루버블
- Build
- Linux
- C# 고급 기술
- 스쿠버다이빙
- C
- PowerShell
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |