C++ MASM에서 x64 어셈블리에서 HelloWorld printf
3198 단어 C++assemblyVisualStudioMASM
환경
Visual Studio 2019
MSVC 14.16.27023
C++14
x64
소개
x86에서는 인라인 어셈블리( __asm
)를 사용할 수 있지만 x64는 지원되지 않으므로 별도로 번거로울 필요가 있습니다.
미리 빌드 설정에서 masm
를 사용하도록 설정해야 합니다.
임의의 디렉토리에 임의의 이름으로 .asm
를 작성해, Microsoft Macro Assembler
를 설정합니다.
어셈블리 작성
이 예제에서는 샘플로 다음 코드를 조립합니다.
example.cpp#include <cstdio>
extern "C" void helloworld()
{
printf("Hello World from %s!", "Assembly");
}
최소한의 조립 예:
helloworld.asm.code
; [.data]
message_str db 'Assembly', 0
format_str db 'Hello World from %s!', 0
; [.text]
extrn printf:proc
helloworld proc
lea rdx, message_str
lea rcx, format_str
jmp printf
helloworld endp
end
발신자:
이 예제의 경우 printf
위의 어셈블리에서 함수 포인터를 사용하기 때문에 legacy_stdio_definitions.lib
(또는 libcmt.lib(マルチスレッド)
, libc.lib(シングルスレッド)
or 적절한 링커) 링크가 필요합니다.
main.cpp#pragma comment(lib, "legacy_stdio_definitions.lib")
#ifdef __cplusplus
extern "C" {
#endif
void helloworld();
#ifdef __cplusplus
};
#endif
int main(const int argc, const char** argv)
{
helloworld();
return 0;
}
샘플 결과
Reference
이 문제에 관하여(C++ MASM에서 x64 어셈블리에서 HelloWorld printf), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kkent030315/items/d19b4f3ca5efa8c54752
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 예제에서는 샘플로 다음 코드를 조립합니다.
example.cpp
#include <cstdio>
extern "C" void helloworld()
{
printf("Hello World from %s!", "Assembly");
}
최소한의 조립 예:
helloworld.asm
.code
; [.data]
message_str db 'Assembly', 0
format_str db 'Hello World from %s!', 0
; [.text]
extrn printf:proc
helloworld proc
lea rdx, message_str
lea rcx, format_str
jmp printf
helloworld endp
end
발신자:
이 예제의 경우
printf
위의 어셈블리에서 함수 포인터를 사용하기 때문에 legacy_stdio_definitions.lib
(또는 libcmt.lib(マルチスレッド)
, libc.lib(シングルスレッド)
or 적절한 링커) 링크가 필요합니다.main.cpp
#pragma comment(lib, "legacy_stdio_definitions.lib")
#ifdef __cplusplus
extern "C" {
#endif
void helloworld();
#ifdef __cplusplus
};
#endif
int main(const int argc, const char** argv)
{
helloworld();
return 0;
}
샘플 결과
Reference
이 문제에 관하여(C++ MASM에서 x64 어셈블리에서 HelloWorld printf), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kkent030315/items/d19b4f3ca5efa8c54752
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(C++ MASM에서 x64 어셈블리에서 HelloWorld printf), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kkent030315/items/d19b4f3ca5efa8c54752텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)