Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: branon32 en 6 Diciembre 2018, 19:02 PM

Título: [?] ERRORLEVEL
Publicado por: branon32 en 6 Diciembre 2018, 19:02 PM
Hola buenas
Estoy haciendo un programa en c++ para un archivo bat y necesito pasarle variables al archivo por lotes, como hago para establecer %ERRORLEVEL%??


Hace mucho que busco información pero no encuentro nada  :-[
Título: Re: [?] ERRORLEVEL
Publicado por: AlbertoBSD en 6 Diciembre 2018, 19:17 PM

int main() {
return 20; //El valor que retornes de la funcion principal es el indicado para el ERRORLEVEL, generalemnte siempre es return 0; cuando todo salio bien
}



(http://i.imgur.com/EkSw8af.png) (https://imgur.com/EkSw8af)
Título: Re: [?] ERRORLEVEL
Publicado por: branon32 en 6 Diciembre 2018, 21:15 PM
No está funcionando

array.exe
Código (cpp) [Seleccionar]

int main(){
return 20;
}


main.bat
Código (DOS) [Seleccionar]

@echo off

array
echo %ERRORLEVEL%

pause


En lugar de devolver 20 devuelve -1073741819  :-X
Título: Re: [?] ERRORLEVEL
Publicado por: AlbertoBSD en 6 Diciembre 2018, 23:01 PM
Posiblemente tu programa no este terminando de manera correcta, posiblemente tienes algun bufferoverflow y el programa termina de forma inesperada y sin control de error. ejemplo

PROGAMA TOTALMENTE MAL:


#include<string.h>

void funcion() {
char arreglo[20];
memset(arreglo,'A',100); //BUFFER OVERFLOW !!
}

int main() {
funcion();
return 1;
}


Ejemplo llamando a la funcion vulnerable.
(http://i.imgur.com/CrtXFo6.png) (https://imgur.com/CrtXFo6)


Ejemplo SIN llamar a la funcion vulnerable

(http://i.imgur.com/9E4sCfn.png) (https://imgur.com/9E4sCfn)


El programa anterior es totalemente vulnerable APROPOSITO, termina en la funcion(), sin volver a la funcion principal.

Revisa tu codigo posiblemente tienes un  BUG, si manejas memoria dinamica asegurate de no estar trabajando sobre apuntadores ya liberados, si trabajas con funciones como strcpy o similares segurate de cambiarlas por sus metodos seguros,

Asegurate de no salirte de los Limites del arreglo, algo muy comun es que si tienes un arreglo[10], y en el codigo realizas algo como for (i= 0; i <= 10, i++), en este caso estarias escribiendo UN SOLO byte fuera de la direccion del arreglo lo cual causaria un error de buffer overflow conocido como OFF by ONE



Saludos
Título: Re: [?] ERRORLEVEL
Publicado por: branon32 en 6 Diciembre 2018, 23:06 PM
El código que uso es el que puse arriba
Int main y return 20  :-\
Título: Re: [?] ERRORLEVEL
Publicado por: AlbertoBSD en 6 Diciembre 2018, 23:08 PM
No puede ser posible, algo esta mal.

Título: Re: [?] ERRORLEVEL
Publicado por: branon32 en 6 Diciembre 2018, 23:19 PM
Esto es lo que tengo, y estoy utilizando CodeBlocks 13.12

Código (cpp) [Seleccionar]

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>

int main(int argc,char *argv[])
{
    //const char* str = argv[1];
    //char pout = str[atoi(argv[2])];
    //printf("hola");
    return 20;
}