Resultados de la búsqueda a petición "calling-convention"

1 la respuesta

glibc scanf Fallos de segmentación cuando se llama desde una función que no alinea RSP

Al compilar el siguiente código: 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 ...

2 la respuesta

No se puede entender el ejemplo de la convención de llamadas cdecl donde la persona que llama no necesita limpiar la pila

Estoy leyendo elIDA Pro Book [https://nostarch.com/idapro2.htm]. En la página 86 mientras discute las convenciones de llamadas, el autor muestra un ejemplo de convención de llamadas cdecl que elimina la necesidad de que la persona que llama ...

1 la respuesta

¿Devolver una tupla de 2 tuplas es menos eficiente que std :: pair?

Considera este código: #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 y 4 generan código similar para ambos ...

2 la respuesta

¿Por qué se requiere "mov rcx, rax" al llamar a printf en el ensamblador x64?

Estoy tratando de aprender el ensamblador x64. Escribí "hola mundo" e intenté llamar a printf usando el siguiente código: EXTERN printf: PROC PUBLIC hello_world_asm .data hello_msg db "Hello world", 0 .code hello_world_asm PROC push rbp ; save ...

1 la respuesta

¿Se permite la basura en bits altos de parámetros y registros de valor de retorno en x86-64 SysV ABI?

El x86-64 SysV ABI especifica, entre otras cosas, cómo se pasan los parámetros de función en los registros (primer argumento enrdi, luegorsi y así sucesivamente), y cómo se devuelven los valores de retorno enteros (enrax y entoncesrdx para ...

2 la respuesta

¿Cada instrucción PUSH empuja un múltiplo de 8 bytes en x64?

En x64, ¿cada instrucción PUSH empuja un múltiplo de 8 bytes? Si no, ¿cuánto empuja? Además, ¿cuánto espacio de pila consume cada parámetro de función?

1 la respuesta

Llamar a printf en ASM en línea extendido

Estoy tratando de generar la misma cadena dos veces en ASM en línea extendido enCCG, en Linux de 64 bits. int main() { const char* test = "test\n"; asm( "movq %[test], %%rdi\n" // Debugger shows rdi = *address of string* "movq $0, %%rax\n" "push ...

1 la respuesta

Escribir un programa Fizz en ensamblado / Usar la biblioteca C

¿Podría alguien ayudarme con este programa de ensamblaje? Primero imprima los números del 1 al 100. Luego siga las reglas para el juego de conteo para niños Fizz: cada vez que el número sea divisible por 5 o contenga el dígito 5, reemplace el ...

2 la respuesta

Llamar a un puntero de función cuya función asignada tiene menos argumentos que el tipo de puntero

Considere el siguiente código: #include <iostream> typedef int (*test_func_t) (int, int, int); int print_integer (int a) { std::cout << "num: " << a << "\n"; return a; } int main (int argc, char * argv[]) { test_func_t func = (test_func_t) ...

3 la respuesta

Convención de llamada x86: ¿los argumentos pasados por la pila deben ser de solo lectura?

Parece que los compiladores de vanguardia tratan los argumentos pasados por stack como de solo lectura. Tenga en cuenta que en la convención de llamadas x86, la persona que llama empuja los argumentos a la pila y la persona que llama utiliza los ...