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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Temas
Páginas: [1] 2 3 4 5 6 7
1  Programación / Programación C/C++ / ¿Como es posible retornar estructuras con la convencion de llamadas cdecl? en: Ayer a las 22:46
Tengo una pequeña duda...

En C es posible hacer esto:

Código
  1. /*...*/
  2. struct _hdr
  3. char data1;
  4. double data2;
  5. char *data3;
  6. };
  7.  
  8. /*...*/
  9.  
  10. struct _hdr foo (void)
  11. {
  12.    struct _hdr instance;
  13.    /*...*/
  14.    return instance;
  15. }
  16. /*...*/

¿Como es posible hacerlo segun la convencion de llamadas de C?

Citar
Integer values and memory addresses are returned in the EAX register
https://en.wikipedia.org/wiki/X86_calling_conventions

Entiendo que una estructura no es un valor entero (a menos que sea una direccion de memoria). Entonces, ¿Como haciendo uso de cdecl se puede retornar una estructura entera? La citada en el codigo no cabe siquiera en EDX:EAX.

Saludos y gracias por su atencion.
2  Programación / ASM / 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>
3  Programación / ASM / Simbolo no resuelto por el linker. en: 28 Febrero 2021, 01:03 am
Hola.

Estaba buscando una forma de obtener la linea de comandos desde un programa escrito para MASM con la funcion GetCommandLineA de kernel32.lib, pero el linker no resuelve el simbolo:

Citar
POLINK: error: Unresolved external symbol '_GetCommandLineA'.

Lei sobre las convenciones de llamada en un articulo mencionado por @Eternal Idol: http://unixwiz.net/techtips/win32-callconv.html#decor pero la verdad no estoy seguro de en que esta afectando esto aqui.

El codigo:

Código
  1. .686p
  2. .model flat, stdcall
  3.  
  4. includelib \masm32\lib\msvcrt.lib
  5. includelib \masm32\lib\kernel32.lib
  6.  
  7. printf proto C, :dword
  8. exit proto C, :dword
  9.  
  10. extern stdcall GetCommandLineA: proc
  11.  
  12. t macro i:vararg
  13. local s
  14. const segment
  15. s db i, 0
  16. const ends
  17. exitm <offset s>
  18. endm
  19.  
  20. .data?
  21. db ?
  22.  
  23. .data
  24. db ?
  25.  
  26. .code
  27.  
  28. start:
  29. call main
  30. invoke exit, 0h
  31.  
  32. main proc
  33.  
  34. call GetCommandLineA
  35.  
  36. ret
  37. main endp
  38.  
  39. end start
4  Programación / ASM / ¿Como declarar un array dentro de una estructura en MASM? en: 23 Febrero 2021, 22:42 pm
Llevo googleandolo 20 minutos y no logro encontrar una forma de que esto:

Código
  1. _struct struct
  2. data0 db 64 dup (?)
  3. data1 db 64 dup (?)
  4. _struct ends

funcione correctamente. Cuando compruebo el tamaño de _struct es 64 (cuando deberia ser 128).

¿Como declaro un array dentro de una estructura correctamente en MASM?

Segun la MSDN:

Citar
name STRUCT ⟦alignment⟧ ⟦, NONUNIQUE⟧
field-declarations
name ENDS
https://docs.microsoft.com/es-es/cpp/assembler/masm/struct-masm?view=msvc-160

¿Cual es exactamente la sintaxis de field-declarations cuando se trata de un array?

Gracias de antemano.
Saludos.
5  Programación / ASM / ¿Que es exactamente la directiva .x86 de MASM? en: 21 Febrero 2021, 21:33 pm
Si no especifico .686 en mis programas, MASM manifiesta incontables errores.
¿Qué es exactamente esta directiva? ¿Qué hace exactamente? ¿Es como un preprocesado de C o más bien una macro? Y si es una macro ¿Qué hace exactamente la macro dependiendo del procesador que se especifica?

En la MSDN:

Citar
Enables assembly of nonprivileged instructions for the Pentium Pro processor. (32-bit MASM only.)
https://docs.microsoft.com/en-us/cpp/assembler/masm/dot-686?view=msvc-160

¿Como que “Activa”? ¿Por qué es necesario “Activarlas”?

Saludos.
6  Programación / ASM / Especificar una cadena de caracteres para invoke en MASM32. en: 21 Febrero 2021, 15:50 pm
¿Como podria especificar el desplazamiento para INVOKE sin necesairiamente crear una etiqueta y tener que crear una para cada cadena de caracteres que utilice?

Es decir, para en vez de hacer:

Código
  1. .data
  2. data  db "String.", 0
  3.  
  4. ;...
  5.  
  6. invoke ..., offset data

Hacer algo como:

Código
  1. .data
  2. ;...
  3.  
  4. invoke ..., DISPLTXT("String.", 0)

Es decir, por ejemplo, una macro que defina una etiqueta para cada cadena o mejor aun una funcion de MASM32 que funcione para esto.

Gracias de antemano por sus respuestas.
Saludos.
7  Programación / ASM / ¿Existe alguna forma de declarar variables en la pila en ensamblador? en: 20 Febrero 2021, 21:46 pm
En HLLs el compilador se encarga de procesar los calculos necesarios para el uso de variables en la pila, ademas de ocasionar la localidad entre las variables declaradas.

¿Existe alguna forma de hacer esto en ensamblador? Una tecnica, o algo asi...

Lo unico que se me ocurre es:

Código
  1. mov ebp, esp
  2. push eax ;a partir de ahora existe una variable en SS:EBP+ESP+4

¿Hay alguna otra forma que "Memorizando" las posiciones de memoria?

(Eso lo he aprendido desensamblado .COMs con DEBUG.EXE. Si existe una tecnica mas moderna agradeceria una pequeña explicacion o una referencia)

Saludos.
8  Programación / ASM / Representacion de caracteres especiales de C en ensamblador. en: 20 Febrero 2021, 21:22 pm
¿Existe alguna forma de expresar los caracteres de C:

\r \n \a \t \b \0 \x...

En ensamblador con la misma simpleza, o deben ser expresados esecificamente a traves del valor ASCII?

Lei en Stack Overflow que depende del ensamblador... En este caso hablamos de MASM32.

Gracias de antemano.
Saludos.
9  Programación / ASM / ¿Por que tanta diferencia de tamaño entre un programa compilado en un HLL y ASM? en: 20 Febrero 2021, 19:41 pm
Perdonen la trivialidad... pero un programa en C, por ejemplo, el siguiente:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    printf ("Im the output.");
  6.    getchar ();
  7.  
  8.    return 0;
  9. }

y creo que imposiblemente mas exactamente el mismo programa, pero en ensamblador:

Código
  1. .686
  2. .model FLAT
  3.  
  4. includelib \masm32\lib\msvcrt.lib
  5.  
  6. printf proto C, :dword
  7. getchar proto C
  8. exit proto C, :dword
  9.  
  10.    .data?
  11.    dd ?
  12.  
  13.    .data
  14.      __0 db "Im the output.", 0
  15.  
  16.  .code
  17.  
  18. start:
  19.  
  20.    call main
  21.    invoke exit, 0
  22.  
  23. main proc
  24.    invoke printf, offset __0
  25.    invoke getchar
  26.  
  27.    ret
  28.  
  29. main endp
  30. end start

Producen una salida con una diferencia de ciento veintinueve mil seiscientos cuarenta y dos (129 642) bytes ¡Eso seria un 85.40% mayor, para el mismo algoritmo! ¡Que locura!

¿Por que existe esta diferencia tan abismal?
¿Es la diferencia siempre de este tamaño en terminos porcentuales, o la diferencia existe hasta cierto punto?

Saludos.
10  Programación / ASM / ¿Que tan potente es la libreria masm32rt.inc? ¿Vale la pena estudiarla? en: 20 Febrero 2021, 19:18 pm
Hola,

El primer lenguaje que aprendi fue C y hasta ahora sigue siendo el unico que utilizo. Despues de unos meses estudiando MASM comienzo a experimentar con el; especificamente MASM32. Hasta ahora la unica libreria que he utilizado (en general) ha sido msvcrt.lib (Notese mi relacion con C). Siento que estoy en las mismas, y me surgen las preguntas:

¿Deberia estudiar la libreria "Estandar" de MASM32 (masm32rt.inc)?
¿Deberia mas bien estudiar las APIs de Windows para trabajar con ellas directamente?
¿Me basta utilizar la libreria de C?

Por cierto... ¿Alguien  sabe que siginfica el acronimo MSVCRT?

Saludos y gracias de antemano.
Páginas: [1] 2 3 4 5 6 7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines