Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - 85

#61
por queeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeé?

fijate lo que hice fue hacer que compile en mi PC, NADA más, porque tu código no compilaba.

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(){

/* Declaraci¨®n del arreglo de tipo estructura perro */
struct perro{
char fecha[10];
char raza[30];
char color[50];
char nombre[30];
int edad;
float peso;
} perros[100];

int c=0, op, clave;

do{ /* Inicio del ciclo que imprime el men¨²*/

printf( "\n----------------------------------------\n");
printf( "\n Refugio para perros -Ladrido Feliz- \n" );
printf( "\n----------------------------------------\n");
printf( "1) Registrar un perro \n" );
printf( "2) Buscar un perro \n" );
printf( "3) Salir \n" );
printf( "Elige una opcion:",162 );
scanf("%d",&op);
switch (op){

case 1: /*Opcion Registrar perro */
printf( "\n------------------------------\n");
if(c>=100) /* Verifica si hay espacio */
printf("El refugio esta lleno\n");
else{
/*Si hay espacio pide los datos del perro y
Y los guarda en el registro c del arreglo */
printf( "Ingresa los datos del perro:");
printf( "Clave:%.3d\n", c);
printf( "fecha de ingreso[dd/mm/aa]: ");
scanf( "%s", perros[c].fecha);
printf( "nombre: ");
fflush(stdin);
gets( perros[c].nombre);
printf( "color: ");
gets( perros[c].color);
printf( "raza: ");
gets( perros[c].raza);
printf( "edad: ");
scanf("%d" ,&perros[c].edad);
printf( "peso: ");
scanf("%f" ,&perros[c].peso);
c++;
}
break;
case 2: /* Opcion buscar perro */
printf( "\n-------------------------------\n");
printf( "Clave: ");
scanf("%d",&clave);
/* verifica que la clave sea v¨¢lida */
while(clave>=100 || clave <0){
/* Imprime los datos del perro correspondiente
a la clave */
printf("nombre:%s\n",perros[clave].nombre);
printf( "fecha de ingreso: %s\n");
perros[clave].fecha;
printf( "color: %s\n", perros[clave].color);
printf( "raza: %s\n", perros[clave].raza);
printf( "edad: %d a%cos\n",
perros[clave].edad,164);
printf( "peso: %.2f kilos\n",
perros[clave].peso);
}
break;
case 3: /* Caso salir, no hace nada */
break;
default: /* Caso opcion invalida */
printf( "Opcion no valida\n");
break;
}
}while (op!=3); /* El ciclo do-while se repite mientras la
opci¨®n no sea salir (3) */

return 0;
}


por qué usan con IO ?

probá poner tu código en este compilador online, está en modo C
http://www.compileonline.com/compile_c_online.php

Saludos


#62
Primero, no le dediques toda tu vida XD como si fuera lo más importante de la vida XD. Sólamente dedicale lo suficiente para aprender y entrenar  :rolleyes:

Pero lo que no dejás en claro es si estás requiriendo un manual de programación o que te digamos por dónde empezar...

si necesitás manuales, en GOOGLE vas a encontrar muchos, incluso en este foro vas a encontrar cientos de enlaces a manuales de programación.

Si se trata de empezar con C/C++ desde 0, deberías empezar por los programas en modo consola, programas simples, por ejemplo calculadoras, o de operaciones aritméticas en general, puede ser muy instructivo relacionar tus conocimientos de matemática con la programación XD.

Pero contanos más, así sabemos que compilador instalaste, que sistemas operativos estás usando, y todos los detalles que puedas dar va a ayudarte a recibir mejores respuestas.

#63
claro, vos estás diciendo los más cercanos con respecto a la posición, por eso 2,5,0, etc se me ocurren varias maneras, una puede ser obtener la diferencia de cada número con M y ordenar un vector según las diferencias de menor a mayor. Usarías un valor absoluto para las diferencias.
hay otras formas que se me ocurren, fijate esa
#64
rir usando macros para hacer el código más legible?  ;-)
#65
Claro es como te dije por PM, GetAsyncKeyState te sirve para comprobar continuamente el estado de una llave (key), si vos lo hacés tal como está en el primer post, significa que sólo se va a comprobar 1 sóla vez cuando la DLL se adjunte al proceso. Con una sóla vez que lo compruebes no sirve, porque vos podés presionar una llave en cualquier momento y no justo cuando la DLL se carga, por eso necesitás hacerlo dentro de un bucle.

Al mismo tiempo, fijate que por ejemplo en mi código, yo tengo 2 hilos. El principal de la aplicación y el secundario creado con CreateThread explícitamente. Bueno lo que tenés que hacer dentro del secundario es poner un Sleep con un cierto tiempo, ya que dependiendo del sistema de planificación, vos sabés que los hilos necesitan compartir el tiempo de ejecución asignado al proceso. (Ejecución = CPU).
Sería como una planificación manual del programador, poner un Sleep para dejar "respírar" al hilo secundario y pasar al primario.

Alguien experto en planificación, multithreading, multiprocessor, etc te va a poder explicar con más detalle todo esto, porque puede ser diferente para distintas CPUs (monoprocesador o multiprocesador).

#66
ak tenés un ejemplo de como ordenar alfabéticamente
http://foro.elhacker.net/programacion_cc/ejemplo_de_ordenamientos_basicos-t358139.0.html

Si lo necesitás en C#, te puede ayudar B#  (Alias IEAX) ;-)
#67
Si, vos lo dijiste.. eso es una demostración muy específica que te di para lograr un wallhack en el CS 3266, muy específico de esa versión.
Mi intención no era que lo tomés como el método a seguir.
Yo antes que mostrarte eso, te había dicho que la mayoría de los hacks (al menos los primeros), interceptaban GetProcAddress para "engañar" al juego por decirlo así.
Fijate si podés utilizar 'Detours' con las funciones de Opengl32, fijate los códigos de karman, si no lo conocés, es un usuario de este foro que se ha dedicado a estas cosas..

Si tu intención no es pasar las detecciones modernas de sistemas antitrampas, podés empezar con 'Detours', seguir con otras formas de 'patching', fijate los códigos de karman por ejemplo, más adelante vas a aprender otras técnicas, por ejemplo hardware breakpoints.
Eso que preguntaste sobre "codecaves" en otro post tuyo, eso es relacionado al 'patching', y son la mayoría métodos intrusivos.
Los breakpoints de hardware, son no intrusivos ya que no parchean nada.
#68
Eso es vb6 ok, bueno esa idea que viste no es la mejor, en realidad lo que podés hacer es implementar algo conocido como "patching", fijate esto
Patching

no confundir con "HotPatching"
http://technet.microsoft.com/en-us/library/cc781109(v=ws.10).aspx

para lo primero, osea 'patching' que significa "parchear la memoria", para eso podés implementar lo que se conoce como 'detours'.
Oficialmente 'detours' es una librería de Microsoft para realizar parches a funciones API de Win32, pero se ha actualizado bastante. fijate la última versión si te interesa..
http://research.microsoft.com/en-us/projects/detours/

Pero este concepto de un 'detour' más precisamente un 'jmp detour' lo podés aplicar a cualquier función sin la necesidad de una librería.

Se trata de parchear los primeros bytes de una función o en otra parte específica, escribiendo la memoria con una instrucción jmp o call y seguido de una dirección de memoria (VA o RVA, ver instrucción JMP).
JMP
http://stackoverflow.com/questions/2170843/va-virtual-adress-rva-relative-virtual-address

Podés poner 'detours' en las funciones de Opengl32 como en lo que trataba de hacer Luchoz95, y en lo referente a tu código podés investigar como aplicarlo.

Básicamente necesitás la dirección en memoria de la función objetivo, y luego implementar el parche que sería un salto a la dirección de memoria de tu función de reemplazo. Luego lógicamente tenés que hacer que tu función de reemplazo regrese a la original ( Esto es a grandes rasgos, hay algunos detalles más).
#69
deberías postear el código actualizado, y hacerlo dentro de las etiquetas correspondientes que son las de C++. Fijate en las opciones para el armado del post.

y un extra sería si podés hacer que el código compile en algún compilador online, por ejemplo este;
http://www.compileonline.com/compile_cpp_online.php

así es más fácil ayudarte.

Saludos
#70
eiiiii no vale poner varias cosas en una línea para que parezca más corto XD