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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  [Pascal+ASM] función ExtractMemString
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pascal+ASM] función ExtractMemString  (Leído 1,341 veces)
WarZ0n3

Desconectado Desconectado

Mensajes: 22


Ver Perfil
[Pascal+ASM] función ExtractMemString
« en: 11 Mayo 2013, 23:47 pm »

Hace mucho que no hago nada en ASM y ya que hoy en la mañana tuve 2 horas libres y estaba aburrido, retome un pequeño manual de ASM que tenia y en 30 minutos me hice esto, demasiado simple pero muy útil en programación con sockets, espero les sirva.

Lo que hace esta función es extraer un string de otro string defectuoso, puede usarse por ejemplo, para guardar muchas listas defectuosas(en un TStringList claro esta) e ir limpiandolas.
Como explicaba esto es uno de los tantos usos que se le pueda dar, hace no mucho hice una función parecida... aquí la pueden encontrar: http://foro.elhacker.net/programacion_general/funcion_extractstring_pascal-t388927.0.html , solo que esta trabaja más a bajo nivel y con muchas mas rapidez y rendimiento.
Les dejo el código

Código
  1. program ExtractMemString;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.  SysUtils,
  7.  Classes;
  8.  
  9. {/*******************************************\}
  10. {        ExtractMemString @Por WARZ0N3        }
  11. { Explicacion:                                }
  12. { Extrae una palabra de un string defectuoso, }
  13. { muy util en programacion con Sockets.       }
  14. { Pascal+ASM ejecuta el codigo mas optimo y   }
  15. { mucho mas rapido...                         }
  16. {/*******************************************\}
  17. { Uso:                                        }
  18. { __ExtractMemString(                         }
  19. { 'Desde_char_a_remover', variable_defectuosa,}
  20. { 'Hasta_char_a_remover', Lista_strings);     }
  21. {\*******************************************/}
  22. { Ejemplo:                                    }
  23. { __ExtractMemString('!', '&%!PALABRA-$@', '-', TStringList);}
  24. { devuelve: PALABRA                           }
  25. {/*******************************************\}
  26. function __ExtractMemString(from_s:Char; Param:pChar; to_s:Char; TsStrMem:TStringList):pChar;
  27. var
  28.  tos, fms:integer;
  29.  lnStr:integer;
  30.  
  31.  StrMem:pchar;
  32.  CpyStrMem:pchar;
  33.  allocStrMem:pchar;
  34.  lenStr:integer;
  35.  Delim:integer;
  36.  sPos:integer;
  37. begin
  38.  StrNew(@StrMem);
  39.  StrMem:=Param; { palabra defectuosa }
  40.  lenStr:=StrLen(pChar(StrMem));
  41.  
  42.  Delim:= LastDelimiter(from_s, StrMem); { desde }
  43.  sPos:=Pos(to_s, StrMem); { hasta }
  44.  asm
  45.    @@startup:
  46.      XOR EAX, EAX
  47.      MOV EAX, sPos
  48.      PUSH EAX
  49.      POP tos
  50.      DEC tos
  51.  
  52.      CMP EAX, 00000000h
  53.      JZ @plSum
  54.      JMP @pSum
  55.  
  56.      @plSum: ADD tos, EAX
  57.      @pSum:
  58.        XOR EBX, EBX
  59.        MOV EBX, lenStr
  60.        MOV lnStr, EBX
  61.  
  62.        XOR ECX, ECX
  63.        MOV ECX, delim
  64.        MOV fms, ECX
  65.        SUB tos, ECX
  66.  end;
  67.  allocStrMem:=StrAlloc(lnStr);
  68.  StrLCopy(allocStrMem, fms+StrMem, tos); //-$00000003
  69.  TsStrMem.Add(allocStrMem);
  70.  StrDispose(allocStrMem);
  71. end;
  72.  
  73. var TsStrMem:TStringList;
  74. begin
  75.  TsStrMem:= TStringList.Create;
  76.  {*** Llamada a la funcion ***}
  77.  __ExtractMemString('!', '**-!PALABRA?**', '?', TsStrMem); { devuelve PALABRA }
  78.  WriteLn(TsStrMem[0]);
  79.  TsStrMem.Free;
  80.  sleep(3500);
  81. end.
  82.  


« Última modificación: 12 Mayo 2013, 00:14 am por WarZ0n3 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Función que retorna el valor de retorno de otra función
Programación C/C++
naderST 7 4,678 Último mensaje 7 Diciembre 2011, 23:45 pm
por naderST
Como llamar a una funcion dentro de otra funcion. Una ayuda urgentemente porfavo
Programación C/C++
LobateZZZ 1 10,117 Último mensaje 14 Abril 2013, 03:07 am
por rir3760
funcion ExtractString [pascal].
Programación General
WarZ0n3 0 1,545 Último mensaje 26 Abril 2013, 11:56 am
por WarZ0n3
Pascal vs C++: Pascal mejor que c++?
Programación General
Bomb-P 4 10,059 Último mensaje 11 Mayo 2013, 20:42 pm
por BlackM4ster
[Pascal+ASM] Funcion GetIp en asm
Programación General
WarZ0n3 0 1,422 Último mensaje 6 Agosto 2013, 05:52 am
por WarZ0n3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines