Не найдена точка входа в программу при компоновке #2

Open
opened 2025-12-01 18:41:39 +00:00 by grigorevde · 1 comment
grigorevde commented 2025-12-01 18:41:39 +00:00 (Migrated from git.csit.sgu.ru)

wine-10.18 (Staging)

Исходный код:

extrn ExitProcess :proc,
      MessageBoxA :proc

.data
caption db '64-bit hello!', 0
message db 'Hello World!',  0

.code
Start proc
  sub RSP, 8*5

  xor RCX, RCX
  lea RDX, message
  lea R8, caption
  xor R9, R9

  call MessageBoxA

  xor RCX, RCX

  call ExitProcess
Start endp
end

При вызове команды:

bin/build.sh -r -c lab6

возникает следующая ошибка сборщика link.exe:

020c:fixme:bcrypt:BCryptCreateHash ignoring object buffer
LINK : error LNK2001:0200:fixme:nls:RtlSetThreadPreferredUILanguages 256, 0000000000000000, 0000000000000000
0200:fixme:nls:RtlGetThreadPreferredUILanguages 00000034, 000000000051CC2C, 0000000000000000 000000000051CC28
0200:fixme:nls:get_dummy_preferred_ui_language (0x34 0x419 000000000051CC2C 0000000000000000 000000000051CC28) returning a dummy value (current locale)
0200:fixme:nls:RtlGetThreadPreferredUILanguages 00000034, 000000000051CC2C, 00000000009FE4C0 000000000051CC28
0200:fixme:nls:get_dummy_preferred_ui_language (0x34 0x419 000000000051CC2C 00000000009FE4C0 000000000051CC28) returning a dummy value (current locale)
 неразрешенный внешний символ mainCRTStartup.
lab6-cp1251.exe : fatal error LNK1120: неразрешенных внешних элементов: 1

Для меня работает такое решение: добавлении опции /ENTRY:Start при вызове link.exe, где Start - название процедуры-точки входа в исходном коде.
То есть в bin/build.sh вызов выглядит так:
wine $SOURCE/link.exe /DEBUG /MAP /SUBSYSTEM:CONSOLE /ENTRY:Start ${OPTION_LIBS} $(winepath -w ${OPTION_FILENAME}).obj
Так программа успешно собирается

wine-10.18 (Staging) Исходный код: ```asm extrn ExitProcess :proc, MessageBoxA :proc .data caption db '64-bit hello!', 0 message db 'Hello World!', 0 .code Start proc sub RSP, 8*5 xor RCX, RCX lea RDX, message lea R8, caption xor R9, R9 call MessageBoxA xor RCX, RCX call ExitProcess Start endp end ``` При вызове команды: ``` bin/build.sh -r -c lab6 ``` возникает следующая ошибка сборщика link.exe: ``` 020c:fixme:bcrypt:BCryptCreateHash ignoring object buffer LINK : error LNK2001:0200:fixme:nls:RtlSetThreadPreferredUILanguages 256, 0000000000000000, 0000000000000000 0200:fixme:nls:RtlGetThreadPreferredUILanguages 00000034, 000000000051CC2C, 0000000000000000 000000000051CC28 0200:fixme:nls:get_dummy_preferred_ui_language (0x34 0x419 000000000051CC2C 0000000000000000 000000000051CC28) returning a dummy value (current locale) 0200:fixme:nls:RtlGetThreadPreferredUILanguages 00000034, 000000000051CC2C, 00000000009FE4C0 000000000051CC28 0200:fixme:nls:get_dummy_preferred_ui_language (0x34 0x419 000000000051CC2C 00000000009FE4C0 000000000051CC28) returning a dummy value (current locale) неразрешенный внешний символ mainCRTStartup. lab6-cp1251.exe : fatal error LNK1120: неразрешенных внешних элементов: 1 ``` Для меня работает такое решение: добавлении опции `/ENTRY:Start` при вызове link.exe, где `Start` - название процедуры-точки входа в исходном коде. То есть в bin/build.sh вызов выглядит так: `wine $SOURCE/link.exe /DEBUG /MAP /SUBSYSTEM:CONSOLE /ENTRY:Start ${OPTION_LIBS} $(winepath -w ${OPTION_FILENAME}).obj` Так программа успешно собирается
grigorevde commented 2026-04-16 07:28:23 +00:00 (Migrated from git.csit.sgu.ru)

По умолчанию компоновщик ожидает mainCRTStartup в качестве точки входа, можно Start заменить на него. Но в идеале было бы неплохо сделать в скрипте возможность пробрасывать кастомные флаги для ассемблера и компоновщика, да

По умолчанию компоновщик ожидает `mainCRTStartup` в качестве точки входа, можно `Start` заменить на него. Но в идеале было бы неплохо сделать в скрипте возможность пробрасывать кастомные флаги для ассемблера и компоновщика, да
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
grigorevde/masm-linux#2
No description provided.