디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

어셈블리(masm)에서 C# 함수 호출하기

나라뜨갤로그로 이동합니다. 2024.05.12 20:29:33
조회 61 추천 0 댓글 3

오래된 오픈소스 라이브러리를 커스텀하려는데 천재 독일 할아버지가 이걸 어셈블리어로 작성해놨었음...

12년쯤 전에는 아무것도 몰라서 일단 다운로드 받은채로 묵혀뒀었는데

현업6년차가 넘은 인제서야 readme 꼼꼼히 살펴보고 masm인가 깔고 개발환경 만들어서 빌드성공


헌데 본격적으로 수정을 하려니 어셈블리어 공부하고 읽고쓸생각을 하니, 내가 어디 늙다리 고연봉직장이라도 가서 꺼드럭거릴게 아닌이상 너무 비생산적이였음.

그래서 masm에서 닷넷Aot로 빌드한 라이브러리를 호출할수 있을거라생각해 파다가 실패.

dll이 아니라 lib를 뱉어야 하고 닷넷이 x64밖에 Aot지원을 안하고, 연구과정이 아까워서 x64어셈블리에서 x64 Aot빌드의 함수를 호출하는방법 까지만 정리하려고 했는데, 그마저도 도저히 할수가 없었음. 기냥 하루 날림.


근데 포기하려다가 DNNE 라는 라이브러리를 어쩌다 찾은덕분에 냅다 성공해버렸다.

.NET Framework: 971. UnmanagedCallersOnly 특성과 DNNE 사용 (sysnet.pe.kr)

Aot랑 상관없이 .dll을 .lib로 호출가능하게 연결지어주는 녀석같다.

Aot의 목표는 성능최적화인데 내 목적은 성능이랑은 아무렴 상관없으니 딱 맞는 역할이다.


여기까지 해본사람이 없는건지 검색으로 비슷한 사례도 찾기 어려워서 출력이랑 기타 유효한 자료들만 열거해둠.

테스트가능한 예제는 추후에 작성


C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC

> ml64 Asse-mbly1.asm /link /SUBSYSTEM:CONSOLE /entry:main kernel32.lib libcmt.lib advapi32.lib bcrypt.lib crypt32.lib iphlpapi.lib mswsock.lib ncrypt.lib normaliz.lib ntdll.lib ole32.lib oleaut32.lib secur32.lib user32.lib version.lib ws2_32.lib


Microsoft (R) Incremental Linker Version 14.40.33617.1

Copyright (C) Microsoft Corporation. All rights reserved.


/OUT:Assem-bly1.exe

Assem-bly1.obj

/SUBSYSTEM:CONSOLE

/entry:main

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 _tls_index

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpNewArray

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpAssignRef

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpNewFast

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpReversePInvoke

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpReversePInvokeReturn

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpPInvoke

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpPInvokeReturn

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpCheckedAssignRef

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpTrapThreads

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGcPoll

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpThrowEx

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 __security_cookie

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpFallbackFailFast

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 BCryptGenRandom

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhGetOSModuleFromPointer

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhGetRuntimeVersion

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhGetKnobValues

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhBulkMoveWithWriteBarrier

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhHandleFree

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhHandleSet

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpNewFinalizable

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhGetProcessCpuCount

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhSuppressFinalize

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhReReg---------------------isterForFinalize

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhGetMemoryInfo

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhNewString

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 g_cpuFeatures

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 NativeRuntimeEventSource_LogExceptionThrown

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhCurrentOSThreadId

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhGetCrashInfoBuffer

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RaiseFailFastException

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpCheckedLockCmpXchg

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhSpinWait

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 GetTickCount64

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhSetThreadExitCallback

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhYield

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 SleepConditionVariableCS

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 WakeConditionVariable

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 InitializeConditionVariable

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhCompatibleReentrantWaitAny

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhFindMethodStartAddress

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpHandleAlloc

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpHandleAllocDependent

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetDispatchCellInfo

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpUpdateDispatchCellCache

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpSearchDispatchCellCache

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetClasslibFunctionFromEEType

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpWaitForFinalizerRequest

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpSignalFinalizationComplete

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpCollect

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetNextFinalizableObject

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetClasslibFunctionFromCodeAddress

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpCopyContextFromExInfo

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetThreadAbortException

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpSfiInit

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpSfiNext

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpSetThreadDoNotTriggerGC

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpCallCatchFunclet

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpEHEnumInitFromStackFrameIterator

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpEHEnumNext

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpCallFilterFunclet

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpCallFinallyFunclet

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetGcTotalMemory

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpStartNoGCRegion

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpEndNoGCRegion

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGcSafeZeroMemory

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetCurrentThreadStackTrace

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetThunkSize

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetNumThunksPerBlock

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetNumThunkBlocksPerMapping

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetThunkBlockSize

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpAcquireThunkPoolLock

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpReleaseThunkPoolLock

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetThunkDataBlockAddress

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetThunkStubsBlockAddress

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhAllocateThunksMapping

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpByRefAssignRef

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhRegi--------------sterInlinedThreadStaticRoot

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhGetThreadStaticStorage

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpGetModuleSection

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhGetModuleFileName

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpReg---------------isterOsModule

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpCreateTypeManager

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpRegi--------------sterFrozenSegment

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhAllocateNewObject

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpDbl2ULng

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 GetCurrentProcessorNumberEx

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 CreateEventExW

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 CoGetApartmentType

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpRethrow

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhGetCodeTarget

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhGetTargetOfUnboxingAndInstantiatingStub

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhFindBlob

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpCheckedXchg

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhHandleGetDependent

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhAllocateNewArray

NativeLibrary.lib(NativeLibrary.obj) : error LNK2001: 확인할 수 없는 외부 기호 RhpInitialDynamicInterfaceDispatch

Assem-bly1.exe : fatal error LNK1120: 98개의 확인할 수 없는 외부 참조입니다.

Assembling: Assem-bly1.asm


MASM32 SDK

http://www.masm32.com/download/install64.zip Masm 64 programs (masm32.com)

ThomasJaeger/VisualMASM: Visual MASM - Assem-bly IDE for Microsoft MASM (github.com)

위는 자체적으로 masm개발환경을 구축할때 필요한것들이다.

대신 비주얼스튜디오 데스크톱C++개발환경을 설치하고 x86, x64 전용콘솔을 실행시키면 ml ml64 link 등 masm 빌드환경이 갖춰져있다.

https://learn.microsoft.com/cpp/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line

 



추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 비난 여론에도 뻔뻔하게 잘 살 것 같은 스타는? 운영자 24/06/03 - -
어셈블리(masm)에서 C# 함수 호출하기 [3] 나라뜨갤로그로 이동합니다. 05.12 61 0
832 정신나간 async void [1] 나라뜨갤로그로 이동합니다. 05.10 61 0
831 닷넷 오를레앙? 나라뜨갤로그로 이동합니다. 05.08 39 0
830 HttpClient 이쁘게 짜는법있음? [4] ㅇㅇ(221.145) 05.05 56 0
829 C# 관련해서 질문 2개만 하려고 함.. [6] 샵린이(125.184) 05.04 52 0
828 링크) maui+asp core 모바일에서 닷넷서버 + 성공! [7] 나라뜨갤로그로 이동합니다. 04.26 92 1
827 윈폼에서 gif 한번만 재생하고 끝나게 하려면 어떡해야함 [7] ㅇㅇ(122.252) 04.22 70 0
826 Tcp 해본 사람있음? [2] 폭진이갤로그로 이동합니다. 04.19 59 0
825 코드가 막 자기자신을 디버깅함 나라뜨갤로그로 이동합니다. 04.16 47 0
824 Uno 해봤는데... 폭진이갤로그로 이동합니다. 04.12 48 0
823 메모) 반복을 병렬처리로 바꿀때 유의점 나라뜨갤로그로 이동합니다. 04.05 55 1
822 sln솔루션에 하위의 csproj 일괄 추가하기 나라뜨갤로그로 이동합니다. 04.03 32 0
821 Aspire + Legacy WebForm [1] 나라뜨갤로그로 이동합니다. 04.02 42 0
818 .NET Aspire + Blazor 워크샵 후기 [1] 나라뜨갤로그로 이동합니다. 03.31 99 2
817 Garnet–Microsoft Research의 새로운 원격 캐시저장소 [1] Argon갤로그로 이동합니다. 03.19 39 0
816 uno나 maui나 [3] 폭진이갤로그로 이동합니다. 03.08 78 0
815 메모) 닷넷 Aspire + Grafana등 이것저것 연동 예제 나라뜨갤로그로 이동합니다. 03.08 43 0
814 WPF 질문해도 됨? [3] ㅇㅇ(220.123) 03.06 91 0
813 메모) EF Core Dapper처럼 쿼리결과 매핑 나라뜨갤로그로 이동합니다. 03.06 43 0
812 maui 욕하는 글 [5] Argon갤로그로 이동합니다. 03.01 102 0
811 우노 써본 사람있음? [6] 폭진이갤로그로 이동합니다. 02.26 78 0
810 JSON 쓰기 귀찮아서 딕셔너리로 쓰는데 [3] 폭진이갤로그로 이동합니다. 02.26 86 0
809 DirectX (SharpDX)를 사용한 스크린 캡처 [3] 모드맵퍼갤로그로 이동합니다. 02.26 80 0
808 Windows Services 설치 / 제거하는 코드 모드맵퍼갤로그로 이동합니다. 02.26 28 0
807 오랜만에 오니 갤이 살아있네 [1] 모드맵퍼갤로그로 이동합니다. 02.26 35 0
806 링크) IDE에 반영되는 디버그 관련 속성 [1] 나라뜨갤로그로 이동합니다. 02.19 33 0
805 .NET9 출시 [6] 폭진이갤로그로 이동합니다. 02.14 109 0
804 누겟패키지 dll 빌드폴더에 포함 야매 [1] 나라뜨갤로그로 이동합니다. 02.13 61 0
803 Named - InlineArray 쓰기 [3] 나라뜨갤로그로 이동합니다. 02.13 58 0
802 mvvm 잘 설계한 코드있나? [4] 폭진이갤로그로 이동합니다. 02.10 96 0
801 .NET MAUI 안드로이드 성능 문제해결 [1] 폭진이갤로그로 이동합니다. 02.09 55 0
799 maui 진짜 레전드다 [7] 폭진이갤로그로 이동합니다. 02.02 164 0
798 연구) 퀵그리드 스타일로 차트작성 나라뜨갤로그로 이동합니다. 01.29 49 0
797 MySqlConnector 시간초과 해결 방법있음? [4] 폭진이갤로그로 이동합니다. 01.20 65 0
795 갤주픽 씨샵 정보 보는곳 공유좀 [5] ㅇㅇ(172.226) 01.19 83 0
793 C# 편하게 사용할 수 있는 라이브러리 추천한다!! 아붕이(14.42) 01.18 117 0
791 DragonFruit Aot/Trimming지원 템플릿 [5] 나라뜨갤로그로 이동합니다. 01.12 60 0
790 메모) 자체포함빌드 용량 극단적으로 줄이기 뇌절의 영역까지 나라뜨갤로그로 이동합니다. 01.10 38 0
789 Type값만 가지고 SizeOf 최대한 지원 [4] 나라뜨갤로그로 이동합니다. 01.09 44 0
788 minimal api+dapper+raw query+postgresql [10] ㅇㅇ(61.75) 01.05 88 0
787 c# 프로그래밍 배우기 <--입문자가 보기에 괜찮음? [2] ㅇㅇ(58.29) 01.05 99 0
786 도커위에다 dotnet8 작동하냐? [3] 폭진이갤로그로 이동합니다. 01.04 78 0
785 공장 C# 배우고 싶은대 강의나 책 추천좀 [1] 씨갤러(211.36) 01.04 103 0
784 ASP.NET Core 공부 해보고싶은데 추천좀 [6] 폭진이갤로그로 이동합니다. 01.02 115 0
783 메모 - 닷넷 GPGPU병렬처리 나라뜨갤로그로 이동합니다. 23.12.22 40 0
782 메모 - EF Core + 시계열DB 연동 나라뜨갤로그로 이동합니다. 23.12.22 26 0
781 이제 유니티 학원에서 시작하는데.. [10] 프로그래머새싹(119.194) 23.12.06 116 0
780 Blazor WASM에서 CSharpScript 사용 [4] 나라뜨갤로그로 이동합니다. 23.12.05 90 1
779 구형 플랫폼에서 최신구문 선적용 PolySharp 나라뜨갤로그로 이동합니다. 23.12.04 31 0
778 (병특 가능) 채용담당인데, 혹시 주변에 C++/C# 잘하는 갤넘 없냐? [4] 인사팀(121.138) 23.11.30 120 2
12345
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2