Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kaxperday en 26 Julio 2015, 23:48 pm



Título: Error copiando u_char* con apis
Publicado por: Kaxperday en 26 Julio 2015, 23:48 pm
Código
  1. u_char ip[4];
  2. u_char mac[6];
  3. /*for (int i = 0; i < 4; i++)
  4. ip[i]=pkt_data[i+28];
  5. for (int i = 0; i < 6; i++)
  6. mac[i] = pkt_data[i + 22];*/
  7.  
  8. _mbscpy_s(ip, _TRUNCATE, pkt_data +28);
  9. _mbscpy_s(mac, _TRUNCATE, pkt_data+22);

Salida con las apis (usando _mbscpy_s):

Citar
c0a81260cccccccccc
c0a81190ef684965a6
c0a81188329b236d40
c0a81260329b236d40
c0a81190ef684965a6
c0a81188329b236d40
c0a81260329b236d40
c0a81190ef684965a6
c0a81170188bc327db

Salida usando el for:

Citar
c0a812188329b236d40
c0a81260234d5f2697
c0a81c990ef684965a6
c0a81260234d5f2697
c0a812188329b236d40
c0a81c990ef684965a6
c0a812188329b236d40
c0a81260234d5f2697
c0a81c990ef684965a6

No funciona bien _mbscpy_s, ¿¿porque??

Saludos.

Edito: Creo que el fallo radica en que estoy usando UNICODE de juego de caracteres del proyecto, y la funcion como pone aqui:

https://msdn.microsoft.com/en-us/library/td1esda9.aspx

Es para multybyte, y para unicode  sería usar wcscpy_s, (pero ahi ya no sería un argumento de u_char*), ademas _mbscpy_s no da error, ¿que pasa?

Tambien añado que estoy cambiando el proyecto, pues donde antes ponia bucles sustituirlo por apis que hagan lo mismo, pero ya véis como me van de bien, lo mismo ocurre con _mbsicmp que compara u_char* con un u_char*, y dice si son iguales, tampoco me funciona, ¿porque?


Título: Re: Error copiando u_char* con apis
Publicado por: Eternal Idol en 26 Julio 2015, 23:57 pm
Esa funcion es para copiar cadenas (conjunto de caracteres con su cero terminador) y ahi tenes dos arrays de enteros. Usa memcpy.


Título: Re: Error copiando u_char* con apis
Publicado por: Kaxperday en 27 Julio 2015, 00:12 am
Código
  1. memcpy(ip, pkt_data + 28, 4);
  2. memcpy(mac, pkt_data + 22, 6);

Solucionado, mil gracias eternal idol, eso me pasa por no haber usado nunca esa funcion.

Como usaba UNICODE, se me habia ocurrido una idea muy macabra para hacerlo con apis, que seria usar el _wcscpy sería pasar de u_char a wchar_t y luego otra vez a u_char, claro seria la peor solucion posible.

Jeje, pero oye ya me ahorro los bucles gracias a el memcpy :))))

Saludos.

Edito:

Ahora bien, como comparar cadenas usando la api:

Código
  1. bool lista_usuarios::contiene_mac(u_char* mac)
  2. {
  3. bool retorno = false;
  4. for each(host h in usuarios)
  5. {
  6. if (_mbsicmp(h.mac, mac) == -1)
  7. {
  8. retorno = true;
  9. break;
  10. }
  11. }
  12. return retorno;
  13. }

Antes usaba bucles para comparar caracter a caracter, pero ¿como puedo usar las api para comparar las cadenas?

Edito: solucionado, memcmp :))))

Saludos.


Título: Re: Error copiando u_char* con apis
Publicado por: Eternal Idol en 27 Julio 2015, 00:36 am
Solucionado, mil gracias eternal idol, eso me pasa por no haber usado nunca esa funcion.

De nada, si nunca viste esta funcion no estaria mal dar un repaso a algun libro de C++.

Como usaba UNICODE, se me habia ocurrido una idea muy macabra para hacerlo con apis, que seria usar el _wcscpy sería pasar de u_char a wchar_t y luego otra vez a u_char, claro seria la peor solucion posible.

No podes usar funciones de cadena, no tenes cadenas con las que trabajar.


Título: Re: Error copiando u_char* con apis
Publicado por: Kaxperday en 27 Julio 2015, 01:33 am
Citar
De nada, si nunca viste esta funcion no estaria mal dar un repaso a algun libro de C++.

Jejeje, pues la verdad la había visto muchas veces, pero pero pensé que lo que hacía era copiar cadenas y no entré a estudiar su definición pues ya conocía las funciones que hacían eso. Pero resulto que no compara cadenas, sino partes de esta, lo que buscaba.  :-[ :-[ :-[

 :D