Articles of ensamblaje

¿Es posible ejecutar una secuencia de ensamblaje x86 desde C #?

Continuando con mi educación de ingeniería inversa, a menudo he querido poder copiar partes del código ensamblador x86 y llamarlo desde un lenguaje de alto nivel de mi elección para realizar pruebas. ¿Alguien sabe de un método para llamar a una secuencia de instrucciones x86 desde un método C #? Sé que esto se puede […]

Cómo calcular la dirección de destino de salto y la dirección de destino de la sucursal?

Soy nuevo en el lenguaje ensamblador . Estaba leyendo acerca de la architecture de MIPS y estoy atrapado con Jump Target Address y Branch Target Address y cómo calcular cada uno de ellos.

¿Para qué se usan las directivas CFI en Gnu Assembler (GAS)?

Parece que hay una directiva .CFI después de cada línea y también hay una amplia variedad de estos ej., .cfi_startproc , .cfi_endproc , etc. más aquí . .file “temp.c” .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 movq %rsp, %rbp .cfi_offset 6, -16 .cfi_def_cfa_register 6 movl $0, %eax leave ret […]

¿Cómo desensamblar el código de sector de arranque x86 de 16 bits en GDB con “x / i $ pc”? Se trata como de 32 bits

Por ejemplo, con un sector de arranque, el BIOS imprime a en la pantalla main.asm : org 0x7c00 bits 16 cli mov ax, 0x0E61 int 0x10 hlt times 510 – ($-$$) db 0 dw 0xaa55 Entonces: nasm -o main.img main.asm qemu-system-i386 -hda main.img -S -s & gdb -ex ‘target remote localhost:1234’ \ -ex ‘break *0x7c00’ […]

¿Qué significan los prefijos E y R en los nombres de los registros Intel de 32 bits y 64 bits?

Los nombres de registro de 32 bits comienzan con una E y los de 64 bits comienzan con una R. ¿Qué significan la E y la R? ¿Hay alguna razón para elegir estos alfabetos? Además, en los registros de 64 bits, también, podemos ver en cualquier depurador de bajo nivel como Windbg que los bits […]

¿Cómo llamo “cpuid” en Linux?

Mientras escribía un nuevo código para Windows, tropecé con _cpuinfo() desde la API de Windows. Como estoy tratando principalmente con un entorno Linux (GCC), quiero tener acceso a la información de CPU. He probado lo siguiente: #include int main() { int a, b; for (a = 0; a < 5; a++) { __asm ( "mov […]

¿Es correcto cambiar el comportamiento indefinido si el recuento es más grande que el ancho del tipo?

Acabo de comprobar el estándar de C ++ . Parece que el siguiente código NO debe ser un comportamiento indefinido : unsigned int val = 0x0FFFFFFF; unsigned int res = val >> 34; // res should be 0 by C++ standard, // but GCC gives warning and res is 67108863 Y del estándar: El valor […]

Eficiente función de comparación de enteros

La función de compare es una función que toma dos argumentos a y b y devuelve un número entero que describe su orden. Si a es más pequeño que b , el resultado es un entero negativo. Si a es mayor que b , el resultado es un entero positivo. De lo contrario, a y […]

Código de ensamble vs Código de máquina vs Código de objeto?

¿Cuál es la diferencia entre código de objeto, código de máquina y código de ensamblaje? ¿Puedes dar un ejemplo visual de su diferencia?

Cómo: pow (real, real) en x86

Estoy buscando la implementación de pow(real, real) en ensamblaje x86. También me gustaría entender cómo funciona el algoritmo.