Resultados de la búsqueda a petición "calling-convention"
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 ...
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 ...
¿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 ...
¿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 ...
¿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 ...
¿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?
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 ...
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 ...
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) ...
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 ...