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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  problema con masm para 64bits
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con masm para 64bits  (Leído 5,182 veces)
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
problema con masm para 64bits
« en: 5 Agosto 2013, 02:56 am »

hola

tuve curiosidad de pasar el socket que hice a 64 bits, pero tambien tuve problemas para vincular obj a exe, ya que gcc en windows solo funciona para 32bits, hay una version para 64 pero me tira errores, asi que opte por golink, pero encontre que se podia usar masm desde Visual studio, asi que opte por usar masm

hay algunas diferencias en entre nasm y masm sobre el codigo, pero tenia entendido que es mas universal asm, asi que para no complicarme hice el mismo codigo que ya tenia pero con las diferencias de masm, el codigo al compilarlo no me produce errores, pero aparece la pantalla de interrupcion que menciona que hay un error en ejecucion, desafortunadamente ollydbg tampoco funciona para ejecutables de 64 bits y no tengo mucha experiencia con el debugger que viene por defecto en visual studio, pero puse algunos break y tira el error en el primer "call", y posiblemente son todos los call

en nasm normalmente lo uso asi

Código
  1. mov[valor], eax
  2. call [valor]


pero creo en masm eso no funciona, ya googlé varias veces, pero no encuentro como usar call en masm para 64 bits, o cual es la diferencia, etc, todo lo que encuentro es para 32bits

alguien podria explicarme, porque no funciona el codigo que hice?, acabo de empezar en estos dias con masm, asi que todavia hay diferencias que no comprendo, y siento que lo mas recomendable para ensamblador en windows seria masm y en linux seria nasm

por cierto, si me recomiendan mejor usar el IDE de masm en vez de Visual studio, puedo hacer el cambio, lo que sucede es que uso Visual Studio para programar en C o visual basic, aunque me gusta mas usar MinGW con codeblocks, pero ya que tengo esa IDE instalada, decidi mejor programar alli tambien en ensamblador

les dejo el codigo

Código
  1. extrn LoadLibraryA:PROC
  2. extrn ExitProcess:PROC
  3. extrn GetProcAddress:PROC
  4.  
  5. .data
  6.  
  7. wstart db 400 dup (0)
  8.  
  9. wsdll db 'ws2_32.dll',0
  10. wsaddr dq ?
  11. WStp db 'WSAStartup',0
  12. wstaddr dq ?
  13. soc db 'socket',0
  14. socaddr dq ?
  15. conn db 'connect',0
  16. conaddr dq ?
  17. sen db 'send',0
  18. senaddr dq ?
  19.  
  20. sre db "hola mundo",0
  21.  
  22. .code
  23. Start proc
  24. push rbp
  25. mov rbp, rsp
  26.  
  27. mov rdx, offset[wsdll]
  28. call LoadLibraryA
  29. mov[wsaddr], rax
  30.  
  31. mov r8, offset[WStp]
  32. mov r9, [wsaddr]
  33. call GetProcAddress
  34. mov[wstaddr], rax
  35.  
  36. lea rcx,[wstart]
  37. push rcx
  38. push 2
  39. call [wstaddr]
  40.  
  41. mov r8, offset[soc]
  42. mov r9, offset[wsaddr]
  43. call GetProcAddress
  44. mov[wstaddr], rax
  45.  
  46. push 0
  47. push 1
  48. push 2
  49. call [wstaddr]
  50. mov[socaddr], rax
  51.  
  52. mov r8, offset[conn]
  53. mov r9, offset[wsaddr]
  54. call GetProcAddress
  55. mov[conaddr], rax
  56.  
  57. push 16
  58. xor rax, rax
  59. mov rax, 0100007f5c110002h
  60. push rax
  61. push qword ptr[socaddr]
  62. call [conaddr]
  63.  
  64. mov r8, offset[sen]
  65. mov r9, offset[wsaddr]
  66. call GetProcAddress
  67. mov[senaddr], rax
  68.  
  69. push 0
  70. push 50
  71. mov rcx, offset [sre]
  72. push rcx
  73. push qword ptr[socaddr]
  74. call [senaddr]
  75.  
  76. xor ecx, ecx
  77. call ExitProcess
  78.  
  79. mov rsp, rbp
  80. pop rbp
  81.  
  82. Start endp
  83.  
  84. End

si encuetran codigo muy raro, es que use varias formas que encontraba en google pero ninguna funciono, aunque espero siga siendo entendible

salu2


En línea

.                                 
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


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


Ver Perfil WWW
Re: problema con masm para 64bits
« Respuesta #1 en: 5 Agosto 2013, 10:08 am »

Otra vez sin linea de comandos eh, yo use MASM:
ml64 /Zi /DEBUG sock64.asm /link /entry:Start /subsystem:console kernel32.lib

Otra vez tenes que DEPURAR tu codigo.

¿De donde sacaste la informacion sobre la convencion de llamadas en x64? El primer parametro va en RCX, el segundo en RDX, el tercero en R8, el cuarto en R9 y despues en la pila. Obviamente al llamar a LoadLibraryA no le estas pasando el nombre de la DLL donde se debe (en RCX) asi que esta retorna 0. Ahora segui vos con el resto ...

http://en.wikipedia.org/wiki/X86_calling_conventions#Microsoft_x64_calling_convention


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
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: problema con masm para 64bits
« Respuesta #2 en: 5 Agosto 2013, 16:42 pm »

disculpa, lo que sucede es que en visual studio se configura en opciones como se va a compilar sin necesidad de linea de comandos y lo de las llamadas lo saque de donde encontraba información en google, por eso esta revuelto

pero gracias, voy a seguir estudiando lo que mencionas

salu2
En línea

.                                 
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


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


Ver Perfil WWW
Re: problema con masm para 64bits
« Respuesta #3 en: 5 Agosto 2013, 17:58 pm »

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
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: problema con masm para 64bits
« Respuesta #4 en: 8 Agosto 2013, 20:35 pm »

Ademas, se debe de seguir correctamente la convension de llamadas para 64-bits,
Se deja un padding que se le llama shadow space antes de llamar a una funcion y algunos detalles mas aqui:

http://en.wikipedia.org/wiki/X86_calling_conventions
mirar M x64 calling convention
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema para pasar un codigo de MASM a FASM
ASM
ZoNike 4 4,827 Último mensaje 2 Noviembre 2009, 02:17 am
por YST
Necesitro drivers tarjeta inalambrica conceptronic para Windows 7 64bits
Windows
palomitero 1 5,405 Último mensaje 12 Enero 2011, 16:04 pm
por Randomize
Ayuda con visual c++ para Windows7 64bits
Programación C/C++
fifinio 3 6,324 Último mensaje 24 Septiembre 2011, 12:46 pm
por Queta
hooks para puerto serial en masm
ASM
Bleach@lex 1 3,372 Último mensaje 2 Noviembre 2012, 02:52 am
por MCKSys Argentina
problemas para instalar utorrent sever(ubuntu 13.04 64bits)
GNU/Linux
xkiz ™ 2 3,482 Último mensaje 21 Junio 2013, 19:11 pm
por xkiz ™
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines