Вопросы по теме 'calling-convention'
Что такое __stdcall?
Я изучаю программирование на Win32, а прототип WinMain выглядит так:
int WINAPI WinMain ( HINSTANCE instance, HINSTANCE prev_instance, PSTR cmd_line, int cmd_show )
Я был сбит с толку, для чего был нужен этот WINAPI идентификатор, и...
116003 просмотров
schedule
09.07.2022
Почему Mac ABI требует выравнивания стека по 16 байт для x86-32?
Я могу понять это требование для старых систем PPC RISC и даже для x86-64, но для старого проверенного x86? В этом случае стек необходимо выровнять только по 4-байтовым границам. Да, некоторые инструкции MMX / SSE требуют 16-байтового выравнивания,...
7236 просмотров
schedule
14.08.2022
Пользовательское соглашение о вызовах X86_64 для вызова функции C
Мне нужно создать интерфейс (скажем, оболочку), который разрешает вызов из ассемблерного кода X86_64, используя его соглашение о вызовах для функции C, с другим соглашением о вызовах. Лучше всего было бы быть довольно "независимым от компилятора"...
4009 просмотров
schedule
13.01.2023
Изменение соглашения о вызовах с cdecl на stdcall
В VS2005 я использовал соглашение о вызовах _cdecl, и проект строится без каких-либо ошибок компоновщика. После того, как я изменил соглашение о вызовах на _stdcall при переносе проекта на VS2008, я получаю следующую ошибку:
ошибка LNK2001:...
2756 просмотров
schedule
12.11.2022
Соглашение __fastcall в С#
Учитывая, что:
Специально для Майкрософт
Соглашение о вызовах __fastcall указывает, что аргументы функций должны передаваться в регистрах, когда это возможно. В следующем списке показана реализация этого соглашения о вызовах.
И что...
2030 просмотров
schedule
26.09.2022
В чем преимущество использования энергонезависимых регистров в соглашении о вызовах?
Я программирую JIT-компилятор и с удивлением обнаружил, что многие из регистров x86-64 энергонезависимы (сохраняются вызываемым) в соглашении о вызовах Win64. Мне кажется, что энергонезависимые регистры просто увеличивают объем работы всех функций,...
1376 просмотров
schedule
06.03.2023
EBP, ESP и стековая рама в сборе
У меня есть несколько вопросов о EBP, ESP и кадре стека в следующем коде.
Почему мы вычли 28 из esp? У нас есть две локальные переменные x и y в main. Так почему мы не вычли 8?
И разве мы не помещаем значения в стек справа (или сверху)...
9161 просмотров
schedule
26.05.2023
При вызове C из MIPS мы используем JR или JALR?
Я пишу самомодифицирующийся код и хочу вызвать функцию C (назовем ее foo ) из MIPS.
Я загрузил добавление памяти foo , &foo в $t1 . Сейчас я jr/jalr $t1 .
Будет ли C устанавливать $ra в качестве моего текущего ПК(+8) (до прыжка),...
905 просмотров
schedule
18.09.2022
Вызов функции Sleep Win32 из сборки создает ошибку нарушения прав доступа
Я использую MASM и Visual C++ и компилирую в x64. Это мой код на С++:
// include directive
#include "stdafx.h"
// external functions
extern "C" int Asm();
// main function
int main()
{
// call asm
Asm();
// get char, return success...
3215 просмотров
schedule
08.09.2023
Segfault при вызове функции C (printf) из сборки
Я использую NASM в Linux для написания базовой программы сборки, которая вызывает функцию из библиотек C (printf). К сожалению, при этом у меня возникает ошибка сегментации. Комментирование вызова printf позволяет программе работать без ошибок....
1247 просмотров
schedule
01.11.2022
В каких случаях компилятору C разрешено игнорировать соглашения о вызовах?
По понятным причинам компилятор C должен скомпилировать все функции, видимые извне для других разделяемых библиотек, чтобы они соответствовали соглашениям о вызовах платформы и другим требованиям ABI. Однако я узнал, что это не обязательно нужно...
152 просмотров
schedule
15.06.2023
Почему код ассемблера __fastcall больше, чем код __stdcall в MS C++?
Я разобрал два разных варианта функции Swap (простой обмен значениями между двумя указателями).
1). __fastcall http://pastebin.com/ux5LMktz
2). __stdcall (функция без явного модификатора соглашения о вызовах по умолчанию будет иметь...
506 просмотров
schedule
26.08.2022
Как перейти к другой функции в c?
В основном я пытаюсь смоделировать ассемблерный код на языке C.
Вот код C:
int main()
{
test();
main_next:
printf("Hello, World!");
}
void test()
{
goto main_next;
}
Пытаясь скомпилировать этот код (32-разрядная версия Linux,...
8922 просмотров
schedule
27.04.2022
Соглашение о вызовах FORTRAN DLL от MapleSim/Modelica
Язык моделирования Modelica поддерживает вызов функций из внешних DLL на FORTRAN, однако MapleSim включает только поддержку вызова функций из DLL на C, даже несмотря на то, что заявлена полная поддержка языка Modelica, и у меня нет другого выбора,...
314 просмотров
schedule
18.10.2023
Pythonic способ эффективно обрабатывать переменное количество возвращаемых аргументов
Итак, у меня есть функция, которая может работать либо тихо, либо многословно. В тихом режиме он производит вывод. В подробном режиме он также сохраняет промежуточные вычисления в список, хотя это само по себе требует дополнительных вычислений....
284 просмотров
schedule
30.01.2023
Использование GetProcAddress, когда имя может быть украшено
Как правильно использовать GetProcAddress() в 32-битной DLL? В win32 есть три соглашения о вызовах: cdecl, stdcall и fastcall. Если функция в DLL - foo , они будут украшать имя следующим образом _foo , _foo@N и @foo@N .
Но если автор dll...
1002 просмотров
schedule
26.07.2023
Разница между EAX, 1 и EBX, 1 в сборке?
section .text
global _start ;must be declared for linker (ld)
_start: ;tell linker entry point
mov edx,len ;message length
mov...
4214 просмотров
schedule
04.07.2022
Индексирование аргументов в виде массива в Windows x86-64 ABI
Я пытаюсь перенести функцию-оболочку с 32-битной на x86-64 asm для Windows ABI. Функция зависит от индексации своих аргументов в виде массива.
Я знаю, что MSVC не может выполнять встроенную сборку в проектах X64, но мне интересно встроить...
246 просмотров
schedule
06.03.2023
Встроенные функции и соглашения о вызовах
Есть ли смысл указывать соглашение о вызовах для встроенной функции? Например, я пишу математическую библиотеку SIMD, где рекомендуется использовать __vectorcall , но все мои функции встроены. В некоторых статьях я видел, как люди встраивают все...
507 просмотров
schedule
28.02.2023
.seh_stackalloc и выравнивание стека
Я пишу сборку x64 для ассемблера GNU. Я пытался читать о директивах .seh_*, но не нашел о них много информации. В документах gas они вообще не упоминаются.
Но насколько я понимаю, если мой код может оказаться в стеке во время операции...
458 просмотров
schedule
22.03.2024