• Domingo 16 de Mayo de 2021, 01:50

Autor Tema:  Traducción de dos sentencias NASM a GAS  (Leído 3333 veces)

clicklose

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Traducción de dos sentencias NASM a GAS
« en: Sábado 12 de Febrero de 2011, 01:53 »
0
Alguien podrías decirme como traducir este código (en sintaxis de NASM) a sintaxis de GAS?
mov dword [ebp - 4], eax      
lea ebx, [ebp - 256]

Yo lo escribí así:

movl %eax , -4(%ebp)
leal  - 256(%ebp) , %ebx

Estaría bien?

Saludos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Traducción de dos sentencias NASM a GAS
« Respuesta #1 en: Sábado 12 de Febrero de 2011, 12:42 »
0
Bueno, NASM acepta tanto sintaxis Intel como AT&T.

A primera vista, está bien para GAS. ¿Te da algún error/problema?

clicklose

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Traducción de dos sentencias NASM a GAS
« Respuesta #2 en: Sábado 12 de Febrero de 2011, 23:30 »
0
En realidad forma parte de un código bastante largo, y quería esperar a traducirlo completamente antes de compilar, tengo otras dudas como por ejemplo lineas de este estilo:

mov dword [ebp - 76], 'Hi, '
mov dword [ebp - 72], 'this'
mov dword [ebp - 68], ' is '
mov dword [ebp - 64], 'a pr'
mov dword [ebp - 60], 'oof '

que no se como traducirlas o también
mov cx, [ebp - 20]
mov edx, End - main
Con End y main como etiquetas

La 1° me deja la dudas por el tamaño de los operadores
Sería movw -20(%ebp) , %cx ?
Por las primera lineas y la última no tengo idea :S
Gracias por la ayuda
Saludos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Traducción de dos sentencias NASM a GAS
« Respuesta #3 en: Domingo 13 de Febrero de 2011, 15:06 »
0
Código: ASM
  1. mov dword [ebp - 76], 'Hi, '
  2. mov dword [ebp - 72], 'this'
  3. mov dword [ebp - 68], ' is '
  4. mov dword [ebp - 64], 'a pr'
  5. mov dword [ebp - 60], 'oof '
  6.  
Buf, esto me parece una chorrada inútil, no sé si GAS aceptará eso, pero weno, siempre puedes pasarlo a hexadecimal:

Código: ASM
  1. movl 0x48692C20, -76(%ebp)
  2.  
(no recuerdo cómo se definían los números hexadecimales en GAS  :P )

Cita de: "clicklose"
La 1° me deja la dudas por el tamaño de los operadores
Sería movw -20(%ebp) , %cx ?
Sip

Código: ASM
  1. mov edx, End - main
  2.  
Hm no sé si GAS aceptará esto, pero puedes cargar las direcciones en registros (LEA) y computar dicha resta.

clicklose

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Traducción de dos sentencias NASM a GAS
« Respuesta #4 en: Domingo 13 de Febrero de 2011, 18:15 »
0
Las lineas en la que carga texto las necesito hacer así para no usar sección .data, había pensado la de los hexadecimales (te faltó el "$" antes del número), es una pena que GAS no tenga una forma más cómoda como la de NASM
Voy a probar el de las etiquetas, para la diferencia

Código: ASM
  1. leal End , %edi
  2. leal main , %esi
  3. subl %esi , %edi
  4.  
estaría bien decís?

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Traducción de dos sentencias NASM a GAS
« Respuesta #5 en: Lunes 14 de Febrero de 2011, 01:02 »
0
Cita de: "clicklose"
para no usar sección .data
¿Por alguna razón en concreto?

Cita de: "clicklose"
había pensado la de los hexadecimales (te faltó el "$" antes del número)
Ups... es que GAS no es mi fuerte  :P

Cita de: "clicklose"
estaría bien decís?
Supongo que no debería dar ningún problema.

clicklose

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Traducción de dos sentencias NASM a GAS
« Respuesta #6 en: Lunes 14 de Febrero de 2011, 08:38 »
0
Cita de: "m0skit0"
¿Por alguna razón en concreto?

Es parte de un trabajo práctico para una materia. Tengo que escribir un programa con temática libre y elegí hacer un virus que infecte archivos ELF, nada dañino, sólo algo que se comporte como un virus como una "prueba del concepto". Como debo infectar al binario con el virus, no puedo usar data pués copiaré únicamente el text segment del pequeño
Me falta poca información para poder escribir un virus desde cero, puedo abrir otro hilo sobre el tema?
Muchas gracias por la ayuda, fue de gran utilidad.

Saludos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Traducción de dos sentencias NASM a GAS
« Respuesta #7 en: Lunes 14 de Febrero de 2011, 13:52 »
0
Cita de: "clicklose"
Como debo infectar al binario con el virus, no puedo usar data pués copiaré únicamente el text segment del pequeño
Realmente no es una razón. De hecho es posible que de esta forma tu binario ocupe más que si usas una sección .data, dado que al usar inmediatos en las instrucciones, hagan que la instrucción sea un poco más grande. Ten en cuenta que la sección de datos va pegada al segmento de texto, generalmente al final (esto se le puede indicar al ensamblador). Realmente no hay pérdida de memoria. Además podrías incluír el tamaño del segmento directamente en dicha sección sin tener que operarlo.

Saludos y suerte con la práctica, realmente interesante ^_^

clicklose

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Traducción de dos sentencias NASM a GAS
« Respuesta #8 en: Lunes 14 de Febrero de 2011, 20:48 »
0
Cita de: "m0skit0"
Cita de: "clicklose"
Como debo infectar al binario con el virus, no puedo usar data pués copiaré únicamente el text segment del pequeño
Realmente no es una razón. De hecho es posible que de esta forma tu binario ocupe más que si usas una sección .data, dado que al usar inmediatos en las instrucciones, hagan que la instrucción sea un poco más grande. Ten en cuenta que la sección de datos va pegada al segmento de texto, generalmente al final (esto se le puede indicar al ensamblador). Realmente no hay pérdida de memoria. Además podrías incluír el tamaño del segmento directamente en dicha sección sin tener que operarlo.


Si, es verdad que puedo introducir el .data pero es un lío bastante grande :P.
Por casualidad sabés cómo funciona un program header que tiene tipo 1 (en un ELF)
Digo porque es el único detalle que me falta entender :S

Cita de: "m0skit0"
Saludos y suerte con la práctica, realmente interesante ^_^

Gracias, es realmente muy interesante

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Traducción de dos sentencias NASM a GAS
« Respuesta #9 en: Lunes 14 de Febrero de 2011, 22:43 »
0
Cita de: "clicklose"
Por casualidad sabés cómo funciona un program header que tiene tipo 1 (en un ELF)
Esto es off-topic, pero weno... ¿Te refieres al campo p_type? Si es 1 es  PT_LOAD. Esto significa que el segmento debe ser cargado en memoria. Te aconsejo este documento.

Saludos.

clicklose

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Traducción de dos sentencias NASM a GAS
« Respuesta #10 en: Lunes 14 de Febrero de 2011, 23:10 »
0
Perdón por el off-topic, abriré otro tema.

Saludos

PD: He leído ese documento y me deja una duda que pregunto en el otro tema