Результаты поиска по запросу "calling-convention"

2 ответа

Каждая инструкция PUSH выдвигает кратное 8 байт на x64?

На x64 каждая инструкция PUSH выдвигает кратное 8 байтов? Если нет, то сколько это толкает?Кроме того, сколько места в стеке занимает каждый параметр функции?

1 ответ

Разрешен ли мусор в старших битах регистров параметров и возвращаемых значений в x86-64 SysV ABI?

2 ответа

Значение ESP не было сохранено должным образом

ТОП публикаций

1 ответ

Соглашение о вызовах на x64

Я видел в нескольких местах, что Microsoft называет соглашения дляx64 платформы были сужены до одной: вызывающий абонент очищает стек (cdecl), а параметры передаются в комбинации стека и регистров (я не буду вдаваться в подробности здесь). Я ...

0 ответов

 и смещение эффективно отбрасывается, поэтому эквивалентно

аюсь изучить ассемблер x64. Я написал «hello world» и попытался вызвать printf, используя следующий код: EXTERN printf: PROC PUBLIC hello_world_asm .data hello_msg db "Hello world", 0 .code hello_world_asm PROC push rbp ; save frame pointer mov ...

1 ответ

Спецификация ABI для некоторых случаев передачи аргументов с участием конструкторов перемещения была неясной, и когда они были прояснены, clang изменился, чтобы следовать ABI. Это, наверное, один из тех случаев.

отрим этот код: #include <utility> #include <tuple> std::pair<int, int> f1() { return std::make_pair(0x111, 0x222); } std::tuple<int, int> f2() { return std::make_tuple(0x111, 0x222); }Clang 3 и 4 генерируют одинаковый код для обоих на ...

2 ответа

Я не пробовал это на Годболте, но ты мог.

аюIDA Pro Book [https://nostarch.com/idapro2.htm], На странице 86, обсуждая соглашения о вызовах, автор показывает пример соглашения о вызовах cdecl, которое устраняет необходимость для вызывающей стороны очищать аргументы из стека. Я ...

2 ответа

printf float в сборке nasm 64-битный

Я хочу напечатать значение с плавающей запятой с помощью printf global main extern printf section .data string: db `%f\n`, 0 section .bss rs: resq 1 [...] movq xmm0, [rs] mov rdi, string mov rax, 0 call printfrs содержит плавающее значение ...

1 ответ

@ DavidC.Rankin: это было совсем недавно, что изменилось на Arch.

омпиляции кода ниже: global main extern printf, scanf section .data msg: db "Enter a number: ",10,0 format:db "%d",0 section .bss number resb 4 section .text main: mov rdi, msg mov al, 0 call printf mov rsi, number mov rdi, format mov al, 0 call ...

1 ответ

, правильный способ написать это

бовал это typedef void (* __stdcall MessageHandler)(const Task*);Это компилируется, но дает мне это предупреждение (VS2003): предупреждение C4229: используется анахронизм: модификаторы данных игнорируются Я хочу объявить указатель на функцию с ...