es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El registro no se está configurando con el valor del buffer en NASM x64.

Espero que puedas ayudarme con este problema. Tengo que leer datos de otro archivo en nasm y quería comprobar el valor de los registros con gdb, pero descubrí que no se puede, así que codifiqué el valor del archivo en un “String”. Estoy bastante seguro de que hice algo terrible y es por eso que no está funcionando, pero como soy un principiante en nasm, no puedo encontrar mi error.

¿No se supone que eax es el valor del búfer? (valor de DebugStr en el ejemplo) ¿Por qué veo 0x31313130? Realmente espero que ustedes puedan ayudarme

SECTION .data

DebugStr: db "01111100 10101010 01111000", 10
DebugStrLen: equ 32

SECTION .bss

SECTION .text

global _start

_start:
xor rax, rax ; rax = 0
xor rbx, rbx ; rbx = 0
xor rcx, rcx ; rcx = 0
xor rdx, rdx ; rdx = 0
mov r8, DebugStr ; r8 = dirección de ReadBuffer
mov r9, Output ; r9 = dirección de OutputBuffer

;mov rax, 0                  ; Especificar llamada a sys_read
;mov rdi, 0                  ; Especificar Descriptor de Archivo 0: Entrada Estándar
;mov rsi, r8                 ; Pasar el desplazamiento del búfer para leer
;mov rdx, ReadBufferSize     ; Pasar el número de bytes a leer en un solo paso
;syscall

mov eax, [r8] ; eax = valor de ReadBuffer a eax = 01111100 10101010 01111000
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar en la forma en que se accede al valor en DebugStr.

    Cuando se ejecuta mov eax, [r8], se cargan los primeros 4 bytes de la ubicación de memoria a la que apunta r8 (que es la dirección de DebugStr) en eax. En este caso, esos primeros 4 bytes son '0111' en representación ASCII, que al convertirse a hexadecimal es 0x31313130. Por lo tanto, eax se está cargando con el valor 0x31313130.

    Para solucionar esto, podría ser necesario cargar todo el valor de DebugStr en un registro, por ejemplo, mediante el uso de un bucle para cargar cada byte individualmente en eax. Alternativamente, podría ser necesario utilizar un tipo de datos o codificación diferente para el valor en DebugStr, dependiendo de los requisitos de su programa.

Comments are closed.