Как вызвать malloc в x86_64 asm

#assembly #malloc #x86-64 #masm #msvcrt

#сборка #malloc #x86-64 #masm #msvcrt

Вопрос:

Я пытаюсь вызвать malloc в сборке Visual Studio Community 2019, но я продолжаю получать неопределенную ссылку на символ malloc.

 mov rcx,10h
call malloc
  

Не компилируется, поскольку я получаю неопределенную ссылку на malloc
Я даже пробовал это с _malloc с той же проблемой.
Мне не хватает какого-то включения?

Комментарии:

1. Это был бы лучший вопрос, если бы вы указали точное сообщение об ошибке, чтобы было ясно, что оно было от ассемблера, а не во время соединения. (Если вы объявили extern malloc , но затем не связались с библиотекой C, вы ожидаете какой-то неопределенной ссылки при связывании после успешной сборки.)

Ответ №1:

Это было решено путем помещения extern в раздел данных

 .data
extern malloc: proc
.code 
;Some code;
  

Комментарии:

1. Если это действительно решило вашу проблему, вы должны принять свой ответ!

2. Мне нужно подождать 2 дня

3. О, тогда я виноват. Я забыл, что время ожидания было таким долгим. Неважно.

4. Вы уверены extern malloc: proc , что он должен быть .data включен? Это кажется странным, если только это не создает заполнитель для динамического связывания (указатель для косвенного вызова) в позиции, которую вы объявляете. Я не использую MASM, но в других ассемблерах для других ОС, например, NASM, extern malloc может быть где угодно и является просто директивой, которая не взаимодействует с текущим разделом.