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 C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Violacion segmento en C Linux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Violacion segmento en C Linux  (Leído 944 veces)
Xin_J.D

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Violacion segmento en C Linux
« en: 30 Marzo 2018, 13:14 pm »

Hola muy buenas a todo el mundo.
Tengo que hacer una practica que consiste en hacer una calculadora que recibe los argumentos por linea de comando. Entonces el programa debe hacer la suma, resta, producto , cuociente y potencia.
Mi problema está en encontrar el signo de operacion ya que este no siempre está en la misma posicion.
En el comando podemos introducir por ejemplo 5x6 , 5x 6 , 5 x 6 , -5x6 , -5 x -6 etc.
Yo pensé en usar strcat para unir las cadena y usar un bucle for para encontrar el signo. Si el primer elemento es un signo k empiece por 0 sino por 1. una vez encontrado , break.
Pero en el main del hay un test que pone argv[1]="5.0" , argv[2]="+" , argv[3]="6.0". Alli es donde me da violacion de segmento en la funcion strcat
Espero que algun experto me pueda ayudar😁😁😁


Código
  1. int main(argc,*argv[ ])
  2. {.....
  3. argv[1]="5.0" ;
  4. argv[2]="+" ;
  5. argv[3]="6.0";
  6.  
  7. strcat(argv[1],argv[2]); // Aqui da violacion de segmento
  8.  
  9. .....
  10. }
  11.  


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.479



Ver Perfil
Re: Violacion segmento en C Linux
« Respuesta #1 en: 30 Marzo 2018, 16:16 pm »

No deberías escribir en argv, es para pasarle información al programa.
Cuando uses strcat, strcpy y toda esta lista de instrucciones asegúrate de que el destino tiene el tamaño suficiente como para alojar la cadena de origen.

Para tu caso lo mejor sería crear un búffer que pudiera alojar toda la cadena, algo así como
Código:
char buffer[255] = {0};
for (int i=1; i<argc; ++i)
    strcat(buffer, argv[i]);


En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
BloodSharp


Desconectado Desconectado

Mensajes: 562


Crianosfera 5 in comming!!!


Ver Perfil
Re: Violacion segmento en C Linux
« Respuesta #2 en: 31 Marzo 2018, 00:33 am »

No deberías escribir en argv, es para pasarle información al programa.
Cuando uses strcat, strcpy y toda esta lista de instrucciones asegúrate de que el destino tiene el tamaño suficiente como para alojar la cadena de origen.

Para tu caso lo mejor sería crear un búffer que pudiera alojar toda la cadena, algo así como
Código:
char buffer[255] = {0};
for (int i=1; i<argc; ++i)
    strcat(buffer, argv[i]);

Como medida de seguridad adicional debería aparte no crear un buffer tan extenso que potencialmente podría ser usado para un ataque de ejecución por overflow:
Código
  1. int main(int argc,char*argv[])
  2. {
  3.    unsigned int uiTotalBufferSize=0;
  4.    char*lpBuffer;
  5.    register unsigned int i;
  6.    for(i=1;i<argc;i++)
  7.        uiTotalBufferSize+=strlen(argv[i]);
  8.    lpBuffer=(char*)malloc(++uiTotalBufferSize);
  9.    if(!lpBuffer)
  10.        return 1;
  11.    lpBuffer[0]=0;
  12.    for(i=1;i<argc;i++)
  13.        strcat(lpBuffer,argv[i]);
  14.    HacerCalculo(lpBuffer);
  15.    free(lpBuffer);
  16.    return 0;
  17. }
« Última modificación: 31 Marzo 2018, 00:41 am por BloodSharp » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con violación de segmento « 1 2 »
Programación C/C++
Triper0 17 13,090 Último mensaje 8 Noviembre 2015, 21:34 pm
por alesurf1989
ayuda violacion de segmento?
Programación General
nightcode 7 2,321 Último mensaje 31 Diciembre 2013, 18:32 pm
por nightcode
Violación de Segmento
Programación C/C++
Jaquieline_JJ 1 964 Último mensaje 24 Abril 2014, 04:11 am
por engel lex
Violación de segmento core generado
Programación C/C++
antolinalvaro 1 1,895 Último mensaje 11 Julio 2018, 13:07 pm
por Mr.Moonlight
Violación de segmento en sockets « 1 2 »
Programación C/C++
e 10 1,650 Último mensaje 17 Julio 2018, 20:50 pm
por e
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines