elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Como puedo hacer que este código ensamblador funcione?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Como puedo hacer que este código ensamblador funcione?  (Leído 11,732 veces)
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Como puedo hacer que este código ensamblador funcione?
« Respuesta #10 en: 25 Octubre 2021, 11:49 am »

%.*s

Perdona el cambio de tema, Eternal Idol, pero una pregunta rapida... ¿Esto que sintaxis tiene?


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Como puedo hacer que este código ensamblador funcione?
« Respuesta #11 en: 25 Octubre 2021, 13:57 pm »

https://www.cplusplus.com/reference/cstdio/printf/

"*   The width is not specified in the format string, but as an additional integer value argument preceding the argument that has to be formatted."


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Como puedo hacer que este código ensamblador funcione?
« Respuesta #12 en: 25 Octubre 2021, 17:29 pm »

https://www.cplusplus.com/reference/cstdio/printf/

"*   The width is not specified in the format string, but as an additional integer value argument preceding the argument that has to be formatted."

No sabia que se podia limitar eso... Un riesgo menos.

Gracias
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Como puedo hacer que este código ensamblador funcione?
« Respuesta #13 en: 25 Octubre 2021, 17:31 pm »

No sabia que se podia limitar eso... Un riesgo menos.

Gracias

De nada  ::)
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
alienxz77b

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Como puedo hacer que este código ensamblador funcione?
« Respuesta #14 en: 25 Octubre 2021, 22:36 pm »

Creo que esta es la solucion:
Código
  1. %include "io.inc"
  2. %macro print 1
  3.    push eax
  4.    push ecx
  5.    mov eax, %1
  6.    mov ecx, 0
  7.    while:
  8.    add ecx, 1
  9.    cmp byte [eax+ecx], 0
  10.    jmp PRINT_CHAR [eax+ecx-1]
  11.    jne while
  12.    pop ecx
  13.    pop eax
  14. %endmacro
  15. %macro strcpy 2
  16.    push eax
  17.    push ecx
  18.    push edx
  19.    push SI
  20.    mov edx, %1
  21.    mov eax, %2
  22.    mov ecx, -1
  23.    .while:
  24.    add ecx, 1
  25.    cmp byte [eax+ecx], 0
  26.    mov SI, [eax+ecx]
  27.    mov [edx+ecx], SI
  28.    jne .while
  29.    pop SI
  30.    pop edx
  31.    pop ecx
  32.    pop eax
  33. %endmacro
  34. ;segment data
  35. section .data
  36. msg db "Hola", 13, 0
  37. section .bss
  38. msg2 resb 100
  39. section .text
  40. global CMAIN
  41. CMAIN:
  42.    xor eax, eax
  43.    strcpy msg2, msg
  44.    print msg2
  45.    ret 0
;D
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Como puedo hacer que este código ensamblador funcione?
« Respuesta #15 en: 25 Octubre 2021, 23:25 pm »

Sigue teniendo fallos; SI es un registro 16 bits por lo que la condicion para terminar el bucle se basa en un byte pero lees y escribis 2 bytes por cada iteracion, eso carece de sentido, es ineficiente (sobrescribe datos) y lleva a problemas, por ejemplo, teniendo una cadena vacia:

Código
  1. msg db 0
  2. oops db "BUG", 0

El strcpy no funciona bien, copia la B de oops en msg2  :rolleyes: Estas leyendo mas alla de los limites de la cadena.

Ademas si por ejemplo en lugar de usar msg2 como parametro a print uso msg. ¿Que crees que pasa? Lee un buffer que no deberia leer: oops.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No puedo hacer que funcione correctamente
Java
John Locke 5 4,126 Último mensaje 25 Abril 2011, 02:32 am
por 1mpuls0
ayuda con este código en ensamblador
ASM
jim12328 6 4,294 Último mensaje 12 Mayo 2014, 22:42 pm
por x64core
Como puedo ver el codigo de este archivo
Hacking
McCript 1 3,277 Último mensaje 21 Junio 2016, 02:44 am
por engel lex
[Pregunta]: ¿Cómo puedo hacer qué esto funcione?
Desarrollo Web
Leguim 2 2,561 Último mensaje 21 Mayo 2020, 11:53 am
por @XSStringManolo
Como puedo revertir este codigo
.NET (C#, VB.NET, ASP)
SrTrp 1 2,376 Último mensaje 1 Julio 2020, 09:51 am
por FFernandez
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines