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

#51
Y tiene también compiladores online XD
http://www.compileonline.com/compile_c_online.php
http://www.compileonline.com/compile_cpp_online.php

Por si necesitás probar algún código más o menos simple, pero de otra forma si estás en Windows bajate el Visual Studio 2010 Express (El que tengo) te va a servir bastante. Sino CodeBlocks.
#52
El compilador, podés usar CodeBlocks, y alternativamente con Visual Studio 2010.
(2012 lo mismo).

Hay compiladores online que te pueden servir para realizar tus pruebas, de este sitio por ejemplo
http://www.compileonline.com/compile_c_online.php
http://www.compileonline.com/compile_cpp_online.php

Si estás empezando del principio con C, veamos como se puede orientarte de alguna forma, por ejemplo podés empezar viendo acerca de las variables, tipos de variables, clases de almacenamiento. No te metas con variables de tipo puntero toda via, mejor sería que continúes con "Funciones", y con el uso de arrays, luego matrices, etc

Punteros es un tema que lo verías luego de lo anterior.

Todo esto sin entrar en C++ XD, pero si trabajabas con Java puede ser que tengas una base como para seguir con C++.

#53
1) ordenar este vector de menor a mayor
int vec[] = { 0, 100, 5, 2, 8, 8, 9 };

2) poner esta matríz a cero sin usar librería std (y no desde su declaración), usando aritmética de punteros.
int mat[5][5];

3) ordenar las siguientes cadenas, a un orden alfabético y guardarlas en un array de cadenas.
char* _1 = "antártida";
char* _2 = "polo norte";
char* _3 = "conchinchina";
char* _4 = "tibet";
char* _5 = "siberia";

char array[5][128];


No vale ninguna trampa XD

#54
sistema operativo, arquitectura, lugar de dónde te lo bajaste al compilador, buscaste algún tutorial para su instalación?, descripción del problema, etc
Saludos
#55
Programación C/C++ / Re: Me tiene loco
7 Abril 2013, 16:58 PM
Lo que conocía es que hay una región llamada Cataluña (no sabía su localización específica), se de la ciudad Barcelona y se del 'Barsa' XD, pero no sabía del idioma o dialecto de esa región.  ;-) ;-)
gracias por la información.
#56
Si en un orden de decencia, sería algo así (para Opengl32):

- HWBP (Aunque sólo 4 por hilo)
- IAT hook (GPA)
- EAT hook (Opengl32)
- Detours (Opengl32, TIB, o GPA)
- MS Detours (Opengl32 o GPA)
- Wrapper de Opengl32
- parchear el juego (Lo que hicistes vos Luchoz95 XD)

Aunque sólo te estamos diciendo que busqués otros métodos, no tiene nada de malo parchear el juego, lo que pasa es que eso no hace al hook precisamente portable hacia otras versiones del juego.

Saludos
#57
Programación C/C++ / Re: Me tiene loco
7 Abril 2013, 16:41 PM
qué citón que se mandó XD, por cierto que idioma es ese de kayron8, parece español pero no precisamente..

Saludos
#58
Si eso estaba puesto para inicializar en cero..
Y con respecto a mi segundo código y el primero de rir, usaban memoria dinámica porque no se sabe cuántos bloques (de letras o números) van a resultar. Lo que pasa que asumimos un número así por decir 40 para hacerla más fácil.
#59
Si ese código funciona está bien, pero lo que te decía del Sleep es que era necesario cuando tenés más de un hilo, es como una planificación manual.
En este caso no es necesario porque tenés 1 sólo hilo, aunque dejalo para que no se queme tu CPU de tantas iteraciones XD
#60
lo que tenés que hacer es obtener la dirección de la función que te interesa interceptar, si estás en un sistema de 32 bits una dirección de memoria son 4 bytes, entonces vas a parchear los primeros 5 bytes de la función, con un JMP + dirección de memoria, lo que serían un total de 5 bytes.

Las consideraciones que te decía antes eran que, aunque sólo necesites 5 bytes, a veces es necesario parchear más, por ejemplo 6 o 7, dependiendo del contenido de la memoria en esas posiciones. Eso se rellena con NOPs en algunos casos o en otros se arregla de otra forma. No hay 1 sólo procedimiento específico para seguir cuando hacés un 'detour'.

Antes de parchear tenés que obtener los permisos de escritura en ese lugar de la memoria.

Los bytes que vas a reemplazar no se pierden, sino que los guardás porque necesitás ejecutarlos luego.

Fijate la información acerca de la instrucción JMP. Y lo de VA y RVA.

fijate, te dejo está función que hace todo directamente.


void* DetourFunc( BYTE* src, const BYTE* dst, const int len )
{
BYTE* jmp = (BYTE*)malloc( len + 5 );
DWORD dwback;
VirtualProtect( src, len, PAGE_READWRITE, &dwback );
memcpy( jmp, src, len );
jmp += len;
jmp[0] = 0xE9;
*(DWORD*)( jmp + 1 ) = (DWORD)( src + len - jmp ) - 5;
src[0] = 0xE9;
*(DWORD*)( src + 1 ) = (DWORD)( dst - src ) - 5;
VirtualProtect( src, len, dwback, &dwback );
return ( jmp - len );
}


Los argumentos son:
src: dirección de la función
dst: dirección de tu función de reemplazo
len: cantidad de bytes para parchear/guardar