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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Problema con CommandLineToArgvW
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con CommandLineToArgvW  (Leído 3,036 veces)
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Problema con CommandLineToArgvW
« en: 28 Febrero 2021, 20:59 pm »

Si un moderador pudiese meter todas mis preguntas en un solo tema se lo agradeceria... mis preguntas las haria en ese tema.

Estoy intentando hacer un programa sencillo utilizando el cifrado XOR para mediante una clave cifrar un archivo.

Estoy intentando que el modificador -i especifique el archivo y que el modificador -k la clave. Sin embargo la funcion CommandLineArgvW aparentemente no me esta retornando un puntero a cadenas sino un puntero a caracteres. Especificamente el primer caracter de la cadena. ¿Como hago que retorne la cadena completa?

Código
  1. .686p
  2. .model flat, stdcall
  3.  
  4. includelib \masm32\lib\msvcrt.lib
  5. includelib \masm32\lib\kernel32.lib
  6. includelib \masm32\lib\shell32.lib
  7.  
  8. printf proto C, :vararg
  9. exit proto C, :dword
  10. putchar proto C, :dword
  11. strlen proto C, :dword
  12. strcpy proto C, :dword, :dword
  13. strcmp proto C, :dword, :dword
  14. memset proto C, :dword, :dword, :dword
  15.  
  16. GetCommandLineW proto stdcall
  17. CommandLineToArgvW proto stdcall, :dword, :dword
  18.  
  19. t macro i:vararg
  20. local s
  21. const segment
  22. s db i, 0
  23. const ends
  24. exitm <offset s>
  25. endm
  26.  
  27. halt macro
  28. local s
  29. s:
  30. jmp s
  31. endm
  32.  
  33. .data?
  34. db ?
  35.  
  36. .data
  37. db ?
  38.  
  39. .code
  40.  
  41. start:
  42. call main
  43. invoke exit, 0h
  44.  
  45. main proc
  46.  
  47. local szFileName[256]:byte, szKey[256]:byte, szCmdLine:dword, lpArgv:dword, dwArgc:dword
  48.  
  49. invoke memset, addr szFileName, 256, 0
  50. invoke memset, addr szKey, 256, 0
  51.  
  52. invoke GetCommandLineW
  53. mov szCmdLine, eax
  54.  
  55. invoke CommandLineToArgvW, szCmdLine, addr dwArgc
  56. mov lpArgv, eax
  57.  
  58. test eax, eax
  59. jnz @0
  60.  
  61. invoke printf, t(0ah, 0dh, "Error loading command line information.")
  62. mov eax, -1
  63. ret
  64.  
  65. @0:
  66.  
  67. xor ecx, ecx
  68. mov ecx, 01h
  69. mov ebx, lpArgv
  70.  
  71. .while ecx<dwArgc
  72.  
  73. mov ebx, lpArgv
  74. mov eax, 4
  75. mul ecx
  76. add ebx, eax
  77.  
  78. mov ebx, [ebx]
  79.  
  80. push ecx
  81. invoke printf, t(0ah, 0dh, "Argument %d is %s"), ecx, ebx
  82. pop ecx
  83.  
  84. push ecx
  85. invoke strcmp, ebx, t("-i")
  86. pop ecx
  87. test eax, eax
  88. jnz @1
  89.  
  90. push ecx
  91.  
  92. inc ecx
  93. mov eax, 4
  94. mul ecx
  95. add ebx, eax
  96.  
  97. mov ebx, [ebx]
  98.  
  99. invoke strcpy, addr szFileName, ebx
  100.  
  101. pop ecx
  102.  
  103. @1:
  104. inc ecx
  105. .endw
  106.  
  107. ret
  108. main endp
  109.  
  110. end start

Citar
mov ebx, lpArgv
mov eax, 4
mul ecx
add ebx, eax

mov ebx, [ebx]

push ecx
invoke printf, t(0ah, 0dh, "Argument %d is %s"), ecx, ebx
pop ecx

Citar
C:\Users\Programming\Desktop>console abc def

Argument 1 is a
Argument 2 is d
C:\Users\Programming\Desktop>


« Última modificación: 28 Febrero 2021, 21:33 pm por marax » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


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


Ver Perfil WWW
Re: Problema con CommandLineToArgvW
« Respuesta #1 en: 28 Febrero 2021, 22:12 pm »

Estas llamando a CommandLineToArgvW por lo que te devuelve cadenas anchas donde cada caracter ocupa 16 bits. A printf le podes pasar %ws para comprobarlo.

https://docs.microsoft.com/en-us/windows/win32/learnwin32/working-with-strings

PD. Los moderadores locales no tienen permisos para unir temas.


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: Problema con CommandLineToArgvW
« Respuesta #2 en: 28 Febrero 2021, 22:21 pm »

Estas llamando a CommandLineToArgvW por lo que te devuelve cadenas anchas donde cada caracter ocupa 16 bits. A printf le podes pasar %ws para comprobarlo.

https://docs.microsoft.com/en-us/windows/win32/learnwin32/working-with-strings

PD. Los moderadores locales no tienen permisos para unir temas.

M*erda... tiene sentido. Con razon los siguientes 8 bits accediendos a ellos linealmente estan vacios... accedi a ellos como una prueba de su contenido.

Muchisimas gracias por tu ayuda.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines