Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ny0x

#51
hola tengo un problema, estoy tratando de aprender algo de las syscalls de linux con asm pero tengo un problema, mi codigo no funciona, el comportamiento es el siguiente.

se supone que pide un texto e imprime su longitud pero sucede:
pide texto, falla de segmentacion
la consola toma lo que tecle y me dice como que si lo hubiera escrito como un comando ejemplo:
si en el programa pongo hola
no me imprime nada y despues la terminal me dice
bash: ola comando no encontrado

mi code es el siguiente

Código (asm) [Seleccionar]

include '/home/nyox/include/linux.inc'
format ELF executable
entry start
segment readable executable

start:
mov eax,SYS_READ
mov ebx, STDIN
mov ecx,texto
mov edx,size
int 0x80

push texto
call strlen
push eax
push numtexto
call itoa

push numtexto
call strlen

mov edx,eax
mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, numtexto
int 0x80


mov eax, SYS_EXIT
xor ebx,ebx
int 0x80

strlen:
push edi
xor ecx,ecx
mov edi, [esp + 8]
not ecx
xor eax,eax
cld
repne scasb
not ecx
pop edi
add eax,ecx
dec eax
retn 4

strrev:
        push ebp
        mov ebp,esp
        push edi
        mov edi,[ebp + 8]
        push edi
        call strlen
        xor ecx,ecx
        dec eax
        jmp LL1
        LL0:
                dec eax
                inc ecx
                cmp ecx,eax
                jge LL2
        LL1:
                mov dl,byte[edi + ecx]
                xchg byte[edi + eax],dl
                mov byte[edi + ecx],dl
                jmp LL0

        LL2:
        pop edi
        pop ebp
retn 4

itoa:
      push ebp
      mov ebp,esp
      pushad
      mov edi,[ebp + 8]
      mov eax,[ebp + 12]
      mov ebx,10
      L@@1:
        xor edx,edx
        div ebx
        xchg eax,edx
        or eax,48
        stosb
        mov eax,edx
        cmp eax,0
        jnz L@@1
        inc edi
        mov byte[edi],al
        push dword[ebp + 8]
        call strrev
      popad
      pop ebp
retn 8

numtexto db 5 dup(0)
texto db 10 dup(0)
size dd 9


SYS_WRITE = 4
SYS_READ = 3
STDIN = 0
STDOUT = 1

el codigo rula perfectamente en win aunque no es lo mismo porque uso printf y scanf asi que supongo que mi error esta en el uso de las syscalls a ver si me pueden echar una mano

el code en win es

Código (asm) [Seleccionar]

format PE console
entry start
include 'c:\fasm\include\win32ax.inc'
.code

start:
        invoke scanf,"%s",texto
       
        push texto
        call strlen
        push eax
        push numtexto
        call itoa

        push numtexto
        call strlen
       
        invoke printf,numtexto
leave
ret

strlen:
        push edi
        xor ecx,ecx
        mov edi, [esp + 8]
        not ecx
        xor eax,eax
        cld
        repne scasb
        not ecx
        pop edi
        add eax,ecx
        dec eax
        retn 4

strrev:
        push ebp
        mov ebp,esp
        push edi
        mov edi,[ebp + 8]
        push edi
        call strlen
        xor ecx,ecx
        dec eax
        jmp LL1
        LL0:
                dec eax
                inc ecx
                cmp ecx,eax
                jge LL2
        LL1:
                mov dl,byte[edi + ecx]
                xchg byte[edi + eax],dl
                mov byte[edi + ecx],dl
                jmp LL0

        LL2:
        pop edi
        pop ebp
retn 4

itoa:
      push ebp
      mov ebp,esp
      pushad
      mov edi,[ebp + 8]
      mov eax,[ebp + 12]
      mov ebx,10
      L@@1:
        xor edx,edx
        div ebx
        xchg eax,edx
        or eax,48
        stosb
        mov eax,edx
        cmp eax,0
        jnz L@@1
        inc edi
        mov byte[edi],al
        push dword[ebp + 8]
        call strrev
      popad
      pop ebp
retn 8
section '.data' data readable writeable
numtexto        db      5 dup(0)
texto   db      10 dup(0)
size    dd      9

section '.idata' import data readable
library msvc,'msvcrt.dll'
import msvc,printf,'printf',scanf,'scanf'


no cambia mucho solo el uso de entrada y salida

gracias de antemano
#52
ASM / Re: Te creamos tu función.
13 Junio 2009, 02:03 AM
Cita de: Freeze. en 13 Junio 2009, 01:58 AM
De todas maneras y me disculpan que me meta, pero el foro es libre :xD

Y si yo quiero hacerle las tareas a las demas personas, es mi problema, siempre y cuando aclaren bien esa norma..

Seria buen punto para debatir porque que sean las normas, no quiere decir que sean correctas.

claro hacerle la tarea a alguien te beneficia a ti porque te sirve como practica de tus conocimientos, pero al mismo tiempo le haces daño a quien se la haces porque lo vuelves un inutil. Pero es decicion de cada uno pero eso si las reglas son las reglas
"Se pregunta por conceptos abstractos. Aquí no estamos para hacerle el trabajo a nadie"
#53
Cita de: AmeRiK@nO en 12 Junio 2009, 06:58 AM
pero entonces ten encuenta la longitud de las strings como te dice Binaria y con eso tendrias una condicion inicial de si son diferentes ya no fueron y te ahorra meterse en el proc  ;)

salu2

si pero para sacar la longitud tambien se necesita algo de codigo, asi que de todas maneras no te salvas del proc   ;D
#54
ASM / Re: Te creamos tu función.
13 Junio 2009, 01:54 AM
esta bien ayudar tampoco hay que dar todo en bandeja de plata, se puede dar una ayudita pero de ahi que dar el source completo  :-\
ademas hay quienes nada mas bienen piden y cuando se les da se van y no vuelven a regresar al menos que nececiten otra cosa
#55
Programación C/C++ / Re: ayudenme
8 Junio 2009, 03:19 AM
no entiendo la obsecion por el system(pause) cuando se pueden usar soluciones mas estandar y/o elegantes  :¬¬
#56
ASM / Re: Entry Point
8 Junio 2009, 03:08 AM
el tasm esta obsoleto, pero si te gusta el software de borland usa el tasm32, de todas maneras prefiero el fasm porque muy facil de usar y ensambla en mas formatos, y trae un rico conjunto de macros aunque personalmente casi no uso macros, solo uso las que sirven para importar las apis.
#57
Programación C/C++ / Re: ayudenme
8 Junio 2009, 03:02 AM
ayudaria que pusieras que errores te salen  :(
@andi1991 no es studio es stdio.h en c y cstdio en C++,
#58
ASM / Re: Entry Point
8 Junio 2009, 02:58 AM
te recomiendo 100% fasm razones:
-Es multiplataforma
-Genera ejecutables de dos
-Genera ELF (ejecutables de linux)
-Genera PE (ejecutsbles de windows)
-Genera COFF (formato plano de archivos objeto)
-Genera Dlls
-Genera MS COFF por lo que lo puedes enlazar con codigo C++ de Visual C
-Es rapido porque esta escrito en asm
-Es gratuito
-Trae IDE y no hay que configurarlo

descarga en http://flatassembler.net/ otra buena opcion es el MASM de microsoft pero personalmente me gusta mas el fasm
#59
hazlo primero en un lenguaje de alto nivel y luego lo pasas a asm, asi es mas facil  :xD, tu problema no es muy complicado solo hay que hacer unas cuantas comparaciones y saltos condicionales.
#60
ASM / Re: Entry Point
1 Junio 2009, 22:38 PM
Bueno algunos libros de asm para los que empiezan por el lenguaje, estan en ingles asi que si no leen ingles  :¬¬ . Son muy buenos y muy bien explicados esta paa ms-dos, windows, linux sintaxis Intel y AT&T

Assembly Language For Intel based computers
PDF
ingles
731 paginas
autor: kip irvine
http://rapidshare.com/files/161065925/Assembly_Language_For_Intel_based_computers.zip


Guide to Assembly Language Programming in Linux
esta en pdf (ingles) y pesa alreddedor de 28 megas y son 539 hojas
http://rapidshare.com/files/167920349/Springer_-_Guide_to_Assembly_Language_Programming_in_Linux.zip



Assembly Language - The True Language of Programmers

esta en pdf (ingles) alrededor de 5 megas 548 paginas
http://rapidshare.com/files/167915627/Assembly_Language__The_True_Language_Of_Programmers.zip

The Art of Assembly Language 80x86
esta en pdf tambien en ingles pesa alrededor de 5 megass y son 1426 paginas
http://rapidshare.com/files/167914786/The_art_of_Assembly_Language_8086.zip

Windows Assembly Language - Systems Programming
Formato: PDF
Idioma: Inglés
Páginas: 421
Peso: 12 MB aprox.

http://rapidshare.com/files/161071665/Windows_Assembly_Language___Systems_Programming_16-_And_32-Bit_Low-Level_Programming_for_the_PC_and_

Introduction To 80x86 Assembly Language And Computer Architecture
Formato: CHM
Idioma: Inglés
Páginas: 499
Peso: 4 MB aprox.

http://rapidshare.com/files/161066804/Introduction_To_80x86_Assembly_Language_And_Computer_Architecture.zip


The Assembly Programming Master Book
Formato: CHM
Idioma: Inglés
Páginas: 736
Peso: 10 MB

http://rapidshare.com/files/161070377/The_Assembly_Programming_Master_Book.zip

Professional Assembly Language
Formato: PDF
Idioma: Inglés
Páginas: 577
Peso: menos de 2 MB

http://rapidshare.com/files/161066347/Professional_Assembly_Language.zip

originalmente publicados por laloolanda

cualquier problemas con los links avisenme y lo subo

Edit:
Documentacion Oficial sobre las instrucciones asm en 64 bits

http://www.intel.com/products/processor/manuals/index.htm
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24592.pdf
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24594.pdf
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/26568.pdf
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/26569.pdf