< 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 소스코드 정렬
'프로그래밍' 카테고리의 다른 글
[Python] 멀티 프로세스,멀티 쓰레드 예제코드 (0) | 2018.07.16 |
---|---|
안드로이드 8.1 오레오(Oreo) AOSP 빌드 (feat. 통화녹음을 하자.) (2) | 2018.04.02 |
[Python] DES 예제 (0) | 2018.02.06 |
[Python] AES 예제 (0) | 2018.02.06 |
[kernel] PsSetLoadImageNotifyRoutine 와 PsSetCreateProcessNotifyRoutine (0) | 2018.02.01 |
댓글