elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 01:43  


Tema destacado: Únete al Grupo Steam elhacker.NET

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Escribir 'A' en mi primer programa : ¿No funciona?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Escribir 'A' en mi primer programa : ¿No funciona?  (Leído 1,548 veces)
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Escribir 'A' en mi primer programa : ¿No funciona?
« en: 31 Diciembre 2010, 17:41 »

Bueno, tengo un code sencillo, sencillamente escribe una A en la terminal... Por algo se empieza  :P
La cosa es que no escribe nada...
Código
global _start
 
section .code
_start:
mov eax, 0x4   ; write (1, "A", 1);
mov ebx, 0x1
mov ecx, 0x42
mov edx, 0x2
int 80H
 
mov eax, 1 // return 0;
xor ebx, ebx
int 80H
 
Citar
nano code.s
nasm -f elf -o code.o code.s
ld -m elf_i386 -o code code.o
chmod 777 *
./code

Bueno, donde esta el fallo? Recuerden que es mi primer code xD...
Alguna idea en algo tan simple?

Pd: De paso, ahora mismito me voy a leer un libro de ASM, a ver si descubro algo  :P


En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #1 en: 31 Diciembre 2010, 18:19 »

El segundo parametro (ecx) es una CADENA y no un caracter.

http://linux.die.net/man/2/write


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
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #2 en: 31 Diciembre 2010, 18:34 »

Entonces como lo hago para escribir una sola A? Y para poner la cadena sin usar data?
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #3 en: 31 Diciembre 2010, 18:57 »

Con pasar una direccion de memoria donde haya una 'A' (0x41) y que count (edx) sea 1 es suficiente. Para no usar .data podrias usar la pila ... proba ... no uso *NIX y encima es 31 de Diciembre  :silbar:
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
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #4 en: 31 Diciembre 2010, 19:05 »

Pero como paso una direccion, algo asi como un puntero? le meto la A en la pila y le paso el ESP?
Código
push 0x42
pop ebx
 

Feliz nochevieja y gracias ! Ahora modifico !
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #5 en: 31 Diciembre 2010, 19:21 »

Como te dije no uso *NIX asi que lo vas a tener que probar vos el codigo:

Código
push ecx ;no importa lo que haya, despues ponemos la 'A'
;no sera una cadena terminada correctamente
;pero como especificamos el tamaño en count no importa
mov byte ptr [esp], 041h ;sintaxis MASM
mov eax, 0x4   ; write (1, "A", 1);
mov ebx, 0x1 ;fd <<
mov ecx, esp ;buffer <<
mov edx, 0x1 ;count <<
int 80H
pop ecx
 


Feliz año nuevo.
« Última modificación: 31 Diciembre 2010, 19:23 por Eternal Idol » 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
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #6 en: 1 Enero 2011, 01:05 »

Bueno, muchisimas gracias por el code de nuevo xD... pero no me va... juntando codes:
Código
global _start
 
section .code
_start:
push ecx
mov byte ptr [esp], 041h
mov eax, 0x4
mov ebx, 0x1
mov ecx, esp
mov edx, 0x1
int 80H
pop ecx
 
 
mov eax, 1
xor ebx, ebx
int 80H
La cosa es que me da fallo de segmentación. Con la compilacion de antes...
Como es? (perdooooona)

 Esto de ASM es buscar nuevas formas de hacer las cosas. En C la cosa no es tan dificil, pero ASM me resulta muchisimo mas entretenido ...
Bueno, poco a poco se agranda el expediente !!!

PD1: Feliz año nuevo otra vez!
PD2: Ahora que lo pienso, muchisimas gracias ... Ahora que me doy cuenta tu me has ayudado a empezar tanto en ASM como en C. Jaja cuando desaparezcas como Rojodos dire que fuistes tu quien me enseño lo que era un programa xD....
« Última modificación: 1 Enero 2011, 01:11 por Sagrini » En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
08l00D

Desconectado Desconectado

Mensajes: 168


Ver Perfil
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #7 en: 1 Enero 2011, 01:40 »

Código
global _start
 
section .code
_start:
push ecx
mov byte [esp], 041h
mov eax, 0x4
mov ebx, 0x1
mov ecx, esp
mov edx, 0x1
int 80H
pop ecx
 
 
mov eax, 1
xor ebx, ebx
int 80H
 
La sintaxis  no es igual en masm y nasm ... la linea que te puso eternal idol para copiar la letra a la pila es para masm, incluso lo puso como comentario en el codigo... en nasm para especificar el tamaño del dato a apuntar es con la palabra byte sola (en el caso de un byte obviamente)...
PD: Un buen libro que podes leer es Professional Assembly Language... es muy completo y de lectura facil y comprensible..

Saludos y feliz año nuevo
En línea
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #8 en: 1 Enero 2011, 01:47 »

Feliz año nuevo y muchas gracias xD!!!
Pd: Me confundi al leer el comentario crei que ponia nasm fallo mio xD..
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #9 en: 1 Enero 2011, 13:27 »

De nadas  ::)
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
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #10 en: 1 Enero 2011, 17:12 »

Bueno, me ha salido otra dudilla pequeña...
Por qué lo haceis asi ?
Código
global _start
 
section .code
_start:
push ecx
mov byte [esp], 041h
mov eax, 0x4
mov ebx, 0x1
mov ecx, esp
mov edx, 0x1
int 80H
pop ecx
 
mov eax, 1
xor ebx, ebx
int 80H
 
 
Primero, push y pop sobran.
Segundo, deja bytes nulos xD... (mala constumbre  :P)
Comparando, en la mia me ahorro 12 bytes al acabar toda la compilacion  :silbar: :silbar: :silbar:
Código
global _start
 
section .code
_start:
 
mov byte [esp], 0x41
mov al, 0x4
mov bl, 0x1
mov ecx, esp
mov dl, 0x1
int 80H
 
mov al, 1
xor ebx, ebx
int 80H
 

Bueno, ahora para usar el code simplemente compilo
Código:
nasm -f elf hello.s
y miro cuanto ocupa
Código:
wc -c hello
¿Correcto? Ahora eso lo uso como shellcode no?
Alguien me puede corregir xD?
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #11 en: 1 Enero 2011, 19:13 »

En realidad por logica push y pop no sobran, estas sobreescribiendo la direccion de retorno, que se guarda en la pila, es cierto que salis con una interrupcion del programa PERO si queres hacer eso en una funcion cuando hagas ret te vas a arrepentir. No hay bytes nulos, su valor sera el mismo que tenian antes, el unico que cambia es el que nos interesa ...
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
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #12 en: 1 Enero 2011, 20:00 »

Código
	mov eax, 0x4
 
No tengo mucha idea de esto, pero gracias por el consejo ...
Y luego... ¿por qué no? Al moverlos asi el valor de eax puede ser cualquiera... Ahhhhhhhhh, como yo lo hago no "limpio" eax?. De la otra forma solo modifico una parte, la otra se queda igual...
Muchisimas gracias estoy apavado  perdona xD...
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #13 en: 1 Enero 2011, 20:57 »

La verdad es que no me habia referido a eso, ni habia visto ese cambio pero si podria ser un problema si EAX es por ejemplo 0xFFFFFFFF ...
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
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Escribir 'A' en mi primer programa : ¿No funciona?
« Respuesta #14 en: 1 Enero 2011, 21:27 »

Aparte, solucionado esto, para hacer la shellcode tendria que compilar sin linkear...
asi?
Código:
nasm shellcode.s
y me generaria "shellcode"
luego
Código:
hexdump shellcode
y tengo mi shellcode xD no?

¿No iria esto en bugs y exploits? Lo pongo aqui porque a lo mejor para shellcode tendria que modificar algo mas no?
por ejemplo, se suele compilar...
Código
 BITS 32   ;Esto es lo que se cambia por segment .code, etc...
 
mov byte [esp], 0x41
mov al, 0x4
mov bl, 0x1
mov ecx, esp
mov dl, 0x1
int 80H
 
mov al, 1
xor ebx, ebx
int 80H
 
Correcto ?
Luego me tendre que repasar lo que se sobre BoF pero weno ahora mismito la shellcode jaja.
Como es?
« Última modificación: 1 Enero 2011, 21:29 por Sagrini » En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa de reconocimiento de voz para escribir textos
Software
obvvbo 2 12,585 Último mensaje 30 Septiembre 2007, 14:05
por NHME
Cómo escribir y ejecutar un programa simple Perl
Scripting
Dr.SysCrack 0 1,176 Último mensaje 19 Noviembre 2007, 03:06
por Dr.SysCrack
Mi primer programa en VB
Programación Visual Basic
Pedro_madrid 12 1,552 Último mensaje 31 Mayo 2008, 11:56
por Pedro_madrid
Como escribir un programa en C (CCs) para pic 16f877a
Electrónica
BrusAngel 6 7,034 Último mensaje 2 Enero 2010, 16:27
por xtermsh
mi primer programa¡¡¡
Programación C/C++
aprendishack2 13 1,471 Último mensaje 7 Febrero 2010, 17:12
por Debci
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines