elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
11 Octubre 2008, 18:15  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++
| | |-+  Split en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Imprimir
Autor Tema: Split en C  (Leído 1363 veces)
Lambda

Desconectado Desconectado

Mensajes: 256



Ver Perfil WWW
Re: Split en C
« Respuesta #15 en: 05 Mayo 2008, 11:51 »

hice esta funcion no se si funcionara ya que no la probe pero en teoria deberia

Código
std::vector<char*> SplitearArchivo(const char* archivo, const char* firma, int tamanoarchivo)
{
std::vector<char*> tmpvec;
 
FILE* f1 = fopen(archivo, "r"); //abrimos el archivo en modo lectura
 
if(!f1)
printf("imposible encontrar/abrir el archivo %s", archivo); //hace falta explicarlo? xD
 
void* datosarchivo = malloc(tamanoarchivo); //reservamos memoria para leer el archivo
memset(datosarchivo, 0, tamanoarchivo); //rellenamos todo con 0ros
 
fread(datosarchivo, 1, tamanoarchivo, f1); //leemos todo el archivo
 
       fclose(f1);
 
char* ptr = NULL;
 
ptr = strtok((char*)datosarchivo, firma);
 
tmpvec.push_back(ptr); //aqui "pusheamos" el primer token
 
//empezamos a separar los demas tokens
 
while(ptr)
{
ptr = strtok(NULL, firma);
tmpvec.push_back(ptr);
}
 
//retornamos el vector
return tmpvec;
}

utilizala asi

std::vector<char*> partes;

partes = SplitearArchivo("C:\\algunarchivo.exe", "mirasoyunafirma", 1024 (cambialo x el tamaño));

despues en partes[0], partes[1] etc tienes los datos
En línea

GunZTracker - Codeado entero en Visual Basic 6

www.gunztracker.com

Lambda

Desconectado Desconectado

Mensajes: 256



Ver Perfil WWW
Re: Split en C
« Respuesta #16 en: 05 Mayo 2008, 11:52 »

.. borren esto XD ya es la segunda vez q me apsa
En línea

GunZTracker - Codeado entero en Visual Basic 6

www.gunztracker.com

Freeze.

Desconectado Desconectado

Mensajes: 2.455

FireSoft


Ver Perfil WWW
Re: Split en C
« Respuesta #17 en: 07 Mayo 2008, 16:49 »

Bueno, aca estoy un poquito mas informado y con un "nuevo" codigo:

Código
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>
std::string Split (std::string cadena, std::string int numero);
 
char buff [260],Yo,*Cont,*palabras;
short int i;
const char Firma[12] = "[***---***]";
const char subFirma[12] = "[---***---]";
int tam;
char a;
std::string *p;
 
int main() {
 
FILE *file;
 
HMODULE hMe = GetModuleHandle(NULL);
DWORD nRet = GetModuleFileName(hMe,buff,260);
file = fopen("C:\\fofo.exe","rb");
while((Yo = fgetc(file)) != EOF){
*p = Yo;
}
Split(*p,Firma,1);
printf("%c",p);
fclose(file);
system("pause>nul");
return 0;
}
 
std::string Split (std::string cadena, std::string m, int numero) {
int posicion;
std::string principal;
std::string secundaria;
secundaria = cadena;
for (int n = 0; n <= numero; n++) {
posicion = secundaria.find (m);
principal = (secundaria.substr (0,posicion));
secundaria = (secundaria.substr (posicion + 1,secundaria.length ()));
}
return principal;
}
 

A mi me da Unhandled Exception :P
En línea

Un nuevo CMS, pruebalo:


E0N
Lab &
Colaborador

Desconectado Desconectado

Mensajes: 2.682



Ver Perfil WWW
Re: Split en C
« Respuesta #18 en: 07 Mayo 2008, 17:16 »

Nuevo? esa funcion es mia y la hice hace ya....  :¬¬ :¬¬
En línea
Freeze.

Desconectado Desconectado

Mensajes: 2.455

FireSoft


Ver Perfil WWW
Re: Split en C
« Respuesta #19 en: 07 Mayo 2008, 17:18 »

Jejeje hay una confusión me refiero a que modifique el codigo que puse en el primer post. No quiere decir nada de que yo hize esa función.

La función Split esta bajo una licencia CreativaCammons y es propiedad de E0N :xD
En línea

Un nuevo CMS, pruebalo:


Lambda

Desconectado Desconectado

Mensajes: 256



Ver Perfil WWW
Re: Split en C
« Respuesta #20 en: 07 Mayo 2008, 18:35 »

Jejeje hay una confusión me refiero a que modifique el codigo que puse en el primer post. No quiere decir nada de que yo hize esa función.

La función Split esta bajo una licencia CreativaCammons y es propiedad de E0N :xD

en que sitio te tira la excepcion?

PD: probaste mi codigo ?  :xD
En línea

GunZTracker - Codeado entero en Visual Basic 6

www.gunztracker.com

Freeze.

Desconectado Desconectado

Mensajes: 2.455

FireSoft


Ver Perfil WWW
Re: Split en C
« Respuesta #21 en: 07 Mayo 2008, 18:42 »

Ya va que tengo una buena idea... No, No probé tu codigo :P
En línea

Un nuevo CMS, pruebalo:


Freeze.

Desconectado Desconectado

Mensajes: 2.455

FireSoft


Ver Perfil WWW
Re: Split en C
« Respuesta #22 en: 07 Mayo 2008, 18:51 »

Ok, ahora tengo esto pero sigue sin funcionar :P

Código
#include <windows.h>
#include <stdio.h>
#include <iostream.h>
#include <string>
#include <stdlib.h>
 
std::string Split (std::string cadena, std::string m, int numero);
 
char buff [260],Yo,*Cont,*palabras;
short int i;
const char Firma[12] = "[***---***]";
const char subFirma[12] = "[---***---]";
int tam;
char fileBuff;
std::string p;
std::string res;
 
int main() {
 
FILE *file;
 
HMODULE hMe = GetModuleHandle(NULL);
DWORD nRet = GetModuleFileName(hMe,buff,260);
file = fopen("C:\\fofo.exe","rb");
while((fileBuff = fgetc(file)) != EOF){
Yo = fileBuff;
p += Yo;
res = Split(p,Firma,1);
cout << res << endl;
}
fclose(file);
system("pause>nul");
return 0;
}
 
std::string Split (std::string cadena, std::string m, int numero) {
int posicion;
std::string principal;
std::string secundaria;
secundaria = cadena;
for (int n = 0; n <= numero; n++) {
posicion = secundaria.find (m);
principal = (secundaria.substr (0,posicion));
secundaria = (secundaria.substr (posicion + 1,secundaria.length ()));
}
return principal;
}
 
En línea

Un nuevo CMS, pruebalo:


Freeze.

Desconectado Desconectado

Mensajes: 2.455

FireSoft


Ver Perfil WWW
Re: Split en C
« Respuesta #23 en: 09 Mayo 2008, 21:10 »

Disculpen por el triple post :P

Esto me funciona:
Código
#include <windows.h>
#include <stdio.h>
#include <iostream.h>
#include <string>
#include <stdlib.h>
 
std::string Split (std::string cadena, std::string m, int numero);
 
char buff [260],Yo,*Cont,*palabras,fileBuff;
short int i;
const char *Firma = "¶";
const char *subFirma = "§";
int tam;
std::string p, res;
 
int main() {
 
FILE *file;
 
HMODULE hMe = GetModuleHandle(NULL);
DWORD nRet = GetModuleFileName(hMe,buff,260);
file = fopen("C:\\fofito.txt","rb");
   if (file != 0) {
    cout << file << endl;
    while((fileBuff = fgetc(file)) != EOF) {
        Yo = fileBuff;
           p += Yo;
           res = Split(p,Firma,1);
    }
       cout << res << endl;
       fclose(file);
   }
   getchar();
return 1;
}
 
std::string Split (std::string cadena, std::string m, int numero) {
int posicion;
std::string principal;
std::string secundaria;
secundaria = cadena;
for (int n = 0; n <= numero; n++) {
posicion = secundaria.find (m);
principal = (secundaria.substr (0,posicion));
secundaria = (secundaria.substr (posicion + 1,secundaria.length()));
}
return principal;
}
 
 

Pero -siempre hay pero- lo logré 'splitar' pero solo con un caracter no con una cadena de caracteres :P Y así no me funciona porque casi todos los caracteres los usan todos los exes y eso no me conviene :P Necesito encontrar una de las 2 soluciones o si hay tercera :xD

- Un Caracter Ascii que no se use en los ejecutables.
- 'Splitar' con una cadena de caracteres no con un caracter :P
En línea

Un nuevo CMS, pruebalo:


Ferсhu

Desconectado Desconectado

Mensajes: 1.221

Menos palabras y Mas codigos.


Ver Perfil WWW
Re: Split en C
« Respuesta #24 en: 10 Mayo 2008, 08:07 »

Aca tenes jeje estaba aburrido e hice la funcion. Espero q la entiendas y q te sirva.

Es un poco rebuscada pero funciona, separa por palabras y por caracter.

Código
#include <stdio.h>
#include <windows.h>
 
int separar(char ***vector, char *cadena, char *buscada);
 
int main(int argc, char *argv[])
{
 
   char frase[]="Holasss999 como estas 999freeze??? 999 :p999a999b999999c999d99aaaa999";
   char **palabras;
   int cant,i;
 
   cant = separar(&palabras,frase,"999");
 
   for(i=0;palabras[i];i++)printf("%s\n",palabras[i]);
   system("PAUSE");
   return EXIT_SUCCESS;
}
 
 
int separar(char ***vector, char *cadena, char *buscada){
 
   char **palabras;
   int tam,i,iant=0,n=0,cantidad=1;
   int tamtotal,tamfrase;
 
   tamtotal=strlen(cadena);
   tam=strlen(buscada);
 
   // recorro primero una vez para contar las partes, para no complicarla con realloc.
   for(i=0;i<tamtotal;i++){
                           while((cadena[i+n]==buscada[n])&&(n<tam))n++;
                           if(n==tam)cantidad++;  
                           n=0;
                           }
 
   palabras=(char **)malloc(cantidad * sizeof(char **));
   cantidad=0;
 
   for(i=0;i<tamtotal;i++){
                           while((cadena[i+n]==buscada[n])&&(n<tam))n++;    
                           if(n==tam){
                                  tamfrase=i-iant;
                                  palabras[cantidad]=(char*)malloc(tamfrase);
                                  memcpy(palabras[cantidad],&cadena[iant],tamfrase);
                                  palabras[cantidad][i-iant]=0;
                                  iant=i+tam;
                                  cantidad++;
                                  i=i+tam;
                           }
                           n=0;
   }
 
   tamfrase=i-iant;
   palabras[cantidad]=(char*)malloc(tamfrase);
   memcpy(palabras[cantidad],&cadena[iant],tamfrase);
   palabras[cantidad][tamfrase]=0;
   palabras[cantidad+1]=0;
   *vector=palabras;
 
   return cantidad;  
}
 

El unico problema q tiene es q cuando hay 2 firmas juntas, la segunda se guarda en la cadena, pero me imagino q en la practica eso no se da.

la funcion devuelve la cantidad-1 de palabras separadas, pero tambien se puede recorrer el vector sin saber eso, ya que el ultimo elemento del vector lo apunto a 0, por eso en el ejemplo al final no uso cant, pero tu hazlo como mas te guste.

Saludos!!

En línea

Freeze.

Desconectado Desconectado

Mensajes: 2.455

FireSoft


Ver Perfil WWW
Re: Split en C
« Respuesta #25 en: 10 Mayo 2008, 20:40 »

Muchas gracias por tu aburrimiento, esto me funcionó voy a adaptarlo al codigo a ver como me va ;)

Mod: Lo esto usando así y ejecuto, me da un "No Enviar" :xD

Código
char Yo;
int cant;
char *p, **subYo;
char Firma[] = "[***---***]";
int main() {
   cant = separar(&subYo,(char *)Yo,Firma);
   return 0;
}
 
« Última modificación: 10 Mayo 2008, 20:51 por Freeze. » En línea

Un nuevo CMS, pruebalo:


Ferсhu

Desconectado Desconectado

Mensajes: 1.221

Menos palabras y Mas codigos.


Ver Perfil WWW
Re: Split en C
« Respuesta #26 en: 11 Mayo 2008, 01:43 »

Animalito de diosss jaja upss...perdon.

Citar
char Yo;

"Yo" es un caracter, no una cadena de caracteres...jeje

Código:
char Yo[2000];

y guarda lo q kieras ahi. Si necesitas mas agranda el numero, si no sabes el numero lo haces dinamicamente, osea, en ejecucion.
En línea

Freeze.

Desconectado Desconectado

Mensajes: 2.455

FireSoft


Ver Perfil WWW
Re: Split en C
« Respuesta #27 en: 11 Mayo 2008, 02:00 »

Si, necesito mas espacio y no se como hacerlo, soy un animalito de diosss :( Debes ser bueno :( Por favor ;)
En línea

Un nuevo CMS, pruebalo:


Ferсhu

Desconectado Desconectado

Mensajes: 1.221

Menos palabras y Mas codigos.


Ver Perfil WWW
Re: Split en C
« Respuesta #28 en: 11 Mayo 2008, 02:12 »

pero guardar lo q kieras analizar en una cadena de caracteres, luegoo lo utilizas.

x ej, declara contenido[10000] y guarda el archivo o el texto q vas a anilzar.
En línea

Freeze.

Desconectado Desconectado

Mensajes: 2.455

FireSoft


Ver Perfil WWW
Re: Split en C
« Respuesta #29 en: 11 Mayo 2008, 02:15 »

El problema es que yo me abro a mi mismo y me busco la cantidad de "frases" que tengo splitandome en varias partes. Como se yo de que tamaño sere "Yo"-osea el archivo- si puede ser de diferentes tamaños -yo me entiendo-
En línea

Un nuevo CMS, pruebalo:


Páginas: 1 [2] 3 Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC
Free counter and web stats