티스토리 뷰
32비트 모듈을 작성 할 때 급하거나 떄론 귀찮아서 inline __asm 을 이용하어 코딩을 한다.
asm을 바로 쓸 수 있기에 해당 방식을 많이 사용한다.
하지만 이제 64비트 시대 아닌가!!
그리고 고객사에서 점점 64비트 전용 프로그램들을 지원하기 시작하면서 난관에 봉착하기에 이른다.
그것은 바로!!
Microsoft Visual Studio 에서는 64bit 컴파일러에서 inline __asm 코드를 더이상 지원 하지 않는다!!
참고 : http://msdn.microsoft.com/en-us/library/wbk4z78b(VS.80).aspx 그럼 이제 우리는 더 이상 asm을 사용할 수 없는것인가? 그럼 우리는 아래와 같이 정리 할 수 있다. 1. C/C++ 소스에서 인라인 어셈을 사용하지 못한다. |
우리는 프로그램을 만들 때 컴파일을 하고 링크 과정을 한다.
그렇다!! 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
- RSA
- bit
- 네트워크 연결
- 백터
- cpu 정보
- 디자인 패턴
- C# 고급 기술
- C
- 최우림
- C#
- IV
- Project
- cpu 이용률
- string
- absl-cpp
- cpu 점유율
- 블럭암호화
- 네트워크 카드 이름
- 알고리즘
- 디자인패턴
- C#.NET
- 네트워크설정
- 네트워크 정보
- 블록암호화
- 패턴
- AES
- C++
- 해시
- 암호화
- 대칭키
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |