본문 바로가기
프로그래밍

Visual Studio / x64 아키텍쳐에서 어셈블리어를 사용하기 | 소스코드정렬

by dladbru 2018. 2. 27.

< Figure 0. x86에서의 __asm 키워드 사용 >


Visual Studio x86 시스템에서는 아래와 같이 어셈블리어 코드를 하드코딩할 수 있었고 가끔씩 필수적으로 써야하는 상황이 있어 사용하던 키워드 였으나 x64 아키텍쳐에서는 사용이 불가능하다는 문제가 있었고, 이를 해결하기 위해 검색을 했고 잊지않도록 이렇게 포스팅으로 남기게 되었습니다.



< Figure 1. x64에서의 __asm 키워드 에러 >



x64에서는 사용할 수 없다는 에러 메시지를 볼 수 있는데 결과적으로 __asm 키워드를 막았을뿐 여전히 어셈블리어는 사용이 가능합니다.



< Figure 2. x64에서의 __asm 키워드 에러 >



어셈블리어 문법으로 함수를 작성하면 된다.  그러면 MSIL를 설치해 컴파일해야하는가? 아니다.  visual studio에서는 이를 지원해준다. 위와 같이 작성이 끝났으면 아래와 같이 사용할 수 있다. 



< Figure 3. x64에서의 asm 사용 >


extern "C" int __stdcall 함수이름(인자)


위 처럼 선언해준다. 현재 함수내에 없고 링커 단계에서 obj에서 가져올 것이므로 외부에 정의되있음을 알려주는거다. o.O




< Figure 4. asm 파일 속성 ㄱㄱ! >



음... 이거 못따라하면 바보



< Figure 5. asm 파일 속성 페이지 >



asm 파일도 빌드되어야하므로 빌드에서 제외를 "아니요" 로 설정하고 컴파일 도구를 지정해야하므로 항목 형식을 "사용자 지정 빌드 도구" 로 선택해준다. 




< Figure 6. asm 파일변경>



사용자 지정 빌드 도구에서 [Figure 6] 처럼 VisualStudio 설치 경로내에 있는 "ml64.exe" 의 경로를 적어주고 옵션과 함께 파일 이름을 적어준다.



< Figure 7. 출력파일 설정 >



출력파일이름은 obj로 끝나게 지정해준다. 최대한 간지나고 이쁘게



< Figure 8. 성공적으로 조작된 Return Address >



분명히 Shell 함수를 호출한적이 없었는데!? Shell 함수를 호출한 효과를 보았다!  앞으로도 이렇게 쓰면된다. 뒤로도



|번외|

CTRL + K + F 소스코드 정렬

반응형

댓글