Articles of assembly

Shellcode de Linux “¡Hola, mundo!”

Tengo el siguiente código NASM funcional: global _start section .text _start: mov eax, 0x4 mov ebx, 0x1 mov ecx, message mov edx, 0xF int 0x80 mov eax, 0x1 mov ebx, 0x0 int 0x80 section .data message: db “Hello, World!”, 0dh, 0ah que imprime “Hello, World! \ n” en la pantalla. También tengo el siguiente contenedor […]

Traducción de código máquina a LLVM IR (desassembly / reensamblaje de X86_64. X86. ARM en código de bits LLVM)

Me gustaría traducir X86_64, x86, ARM ejecutables en LLVM IR (desassembly). ¿Qué solución sugieres?

Ensamblaje – JG / JNLE / JL / JNGE después de CMP

No entiendo las JG/JNLE/JL/JNGE , que vienen después de CMP. por ejemplo, si tengo: CMP al,dl jg label1 Cuando al=101; dl =200 al=101; dl =200 . ¿En lo que le preguntamos al jg ? ¿Está en al>dl ? o al-dl>0 ? La misma prolbem en el siguiente código: test al,dl jg label1 No entiendo lo […]

¿Tiene algún sentido utilizar la instrucción LFENCE en procesadores x86 / x86_64?

A menudo en Internet encuentro que LFENCE no tiene sentido en los procesadores x86, es decir, no hace nada, por lo tanto, en vez de MFENCE , podemos usar absolutamente absolutamente SFENCE , porque MFENCE = SFENCE + LFENCE = SFENCE + NOP = SFENCE . Pero si LFENCE no tiene sentido, entonces ¿por qué […]

¿Por qué System V / AMD64 ABI exige una alineación de astackmiento de 16 bytes?

He leído en diferentes lugares que se hace por “razones de rendimiento”, pero todavía me pregunto cuáles son los casos particulares en los que el rendimiento mejora con esta alineación de 16 bytes. O, en cualquier caso, ¿cuáles fueron las razones por las cuales se eligió esto? editar : estoy pensando que escribí la pregunta […]

¿Por qué las llamadas al sistema x86-64 Linux modifican RCX y qué significa el valor?

Estoy tratando de asignar algo de memoria en Linux con sys_brk syscall. Esto es lo que intenté: BYTES_TO_ALLOCATE equ 0x08 section .text global _start _start: mov rax, 12 mov rdi, BYTES_TO_ALLOCATE syscall mov rax, 60 syscall Lo que pasa es que, según la convención de llamadas de Linux, esperaba que el valor de retorno estuviera […]

¿Cuál es la diferencia entre código nativo, código de máquina y código de ensamblaje?

Estoy confundido sobre el código de máquina y el código nativo en el contexto de los lenguajes .NET. ¿Cuál es la diferencia entre ellos? ¿Son lo mismo?

Laboratorio de bombas phase_4

Dump of assembler code for function func4 : mov %rbx,-0x18(%rsp) : mov %rbp, -0x10(%rsp) : mov %r12,-0x8(%rsp) : sub $0x18,%rsp : mov %edi,%ebx : mov %esi,%ebp : test %edi, %edi : jg 0x400fb2 : mov $0x0,%ebp : jmp 0x400fd2 cmp $0x1, %edi : je 0x400fd2 : lea -0x1(%rbx),%edi : callq 0x400f90 : mov %eax,%r12d : […]

¿Cuál es el motor de stack en la microarchitecture Sandybridge?

Estoy leyendo http://www.realworldtech.com/sandy-bridge/ y tengo algunos problemas para comprender algunos problemas: El rastreador de puntero de stack dedicado también está presente en Sandy Bridge y cambia el nombre del puntero de la stack, eliminando las dependencias en serie y eliminando una cantidad de uops. ¿Qué es realmente un dedicated stack pointer tracker ? Para Sandy […]

¿Por qué es (o no es) SFENCE + LEFENCE equivalente a MFENCE?

Como sabemos por una respuesta previa a ¿Tiene algún sentido la instrucción LFENCE en los procesadores x86 / x86_64? que no podemos usar SFENCE lugar de MFENCE para la consistencia secuencial. Una respuesta sugiere que MFENCE = SFENCE + LFENCE , es decir, que LFENCE hace algo sin lo cual no podemos proporcionar consistencia secuencial. […]