Вопросы по теме 'calling-convention'
Какие регистры сохранять в соглашении о вызовах ARM C?
Прошло много времени с тех пор, как я в последний раз кодировал ассемблер для рук, и я немного заржавел в деталях. Если я вызываю функцию C из arm, мне нужно беспокоиться только о сохранении r0-r3 и lr, верно?
Если функция C использует какие-либо...
76255 просмотров
schedule
10.11.2023
Вызов функции, которая может быть либо cdecl, либо stdcall
Мне нужно написать код, который вызывает внешнюю функцию, которая может быть вызовом stdcall или cdecl в 32-битном приложении Windows. Мой код, вызывающий объект, не может знать заранее, какой из них будет. Прямо сейчас, если я попытаюсь вызвать...
441 просмотров
schedule
21.11.2022
Как запустить поток с функцией другого соглашения о вызовах
Ссылаясь на эту публикацию , я есть чистый виртуальный класс:
#define CALL __stdcall
class IIEvent
{
virtual ~IIEvent() {}
virtual void CALL ev1(int) = 0;
virtual void CALL ev2(int) = 0;
};
Этот интерфейс используется для...
141 просмотров
schedule
11.01.2024
gcc 4.7.2 в Debian wheezy не всегда правильно выравнивает указатель стека. Это ошибка?
Случайно, читая ассемблерный листинг примера программы на C, я заметил, что указатель стека не выровнен по 16 битам перед вызовом функции foo:
void foo() { }
int func(int p) { foo(); return p; }
int main() { return func(1); }
func:
pushq...
136 просмотров
schedule
15.02.2024
Как правильно вызвать функцию Win32/64 из LLVM?
Я пытаюсь вызвать метод из LLVM IR обратно в код C++. Я работаю в 64-битном Visual C++ или, как это описывает LLVM:
Machine CPU: skylake
Machine info: x86_64-pc-windows-msvc
Для целых типов и типов указателей мой код отлично...
801 просмотров
schedule
30.01.2024
Сборка ARM - параметр доступа и возвращаемое значение?
У меня есть прототип функции int Palindrome(const char *c_style_string);
В сборке ARM v8 я считаю, что параметр хранится в регистре w0. Однако разве это не тот регистр, значение которого ret выводит?
Если да, то что мне нужно сделать, чтобы...
875 просмотров
schedule
26.11.2022
Почему параметры системного вызова Assembly x86_64 не в алфавитном порядке, как i386
Есть один вопрос, который меня беспокоит.
Итак... Почему в x86_32 параметры передаются в регистры, которые, как мне кажется, расположены в алфавитном порядке ( eax , ecx , edx , esi ) и рейтинг ( esi , edi , ebp )...
1730 просмотров
schedule
23.03.2024
Распределение стека слишком велико
Я написал ниже код.
int main (int argc, char *argv[])
{
char *uargv[3];
uargv[0] = "echo";
uargv[1] = "hello!";
uargv[2] = 0;
exec("echo", uargv);
exit();
}
И скомпилирован с помощью gcc 5.4.
Ниже приведен ассемблерный код...
79 просмотров
schedule
08.12.2022
почему функция printf показывает желаемый результат в следующем коде?
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a=1;
printf("%d\t%d\t%d\n",a,++a,a++);
return 0;
}
Почему вывод кода 3 3 1 . кто-нибудь объяснит мне, как происходит такой вывод?
52 просмотров
schedule
10.04.2024
Сохранение реестра msvc 2017 x64
Согласно https://docs.microsoft.com/ru-ru/cpp/build/x64-software-conventions?view=vs-2017 — xmm6:xmm15 энергонезависимы. Но моя программа не падает, если я не сохраняю xmm6, xmm7. Я не вызываю ОС из сборки. Нужно ли сохранять регистры в этом...
166 просмотров
schedule
19.09.2022
Как получить аргумент из стека в сборке x64?
Пытаюсь написать процедуру на x64 сборке.
Я вызываю это в основной программе, написанной на C ++. Я передаю несколько параметров. Я знаю, что первые 4 будут в определенных регистрах, а остальные (должны быть) в стеке. Более того, я читал, что...
482 просмотров
schedule
19.11.2022
Вызов sprintf в сборке x64
Кажется, я не могу правильно вызвать sprintf() в ассемблере.
Когда я пытаюсь dprintf() отформатировать свой буфер, все, что я получаю, это:
(null)
и ошибка сегментации. При запуске lldb с моей программой причиной сбоя является...
139 просмотров
schedule
15.09.2022
Ошибка сегментации программы сборки Hello world
Почему я получаю ошибку:
Ошибка сегментации (дамп ядра)
Вот код сборки:
.intel_syntax noprefix
.data
message: .asciz "Hello World!\n"
.text
.global main
main:
lea rdi, message
call printf
ret
84 просмотров
schedule
22.03.2024