[?] ERRORLEVEL

Iniciado por branon32, 6 Diciembre 2018, 19:02 PM

0 Miembros y 1 Visitante están viendo este tema.

branon32

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  :-[
sit tibi terra levis

AlbertoBSD

#1

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
}



Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

branon32

#2
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
sit tibi terra levis

AlbertoBSD

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.



Ejemplo SIN llamar a la funcion vulnerable




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
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

branon32

El código que uso es el que puse arriba
Int main y return 20  :-\
sit tibi terra levis

AlbertoBSD

No puede ser posible, algo esta mal.

  • No estes ejecutando el ejecutable que compilaste. Intenta borrar el exe y compilar de nuevo.
  • Puede ser algun problema de compilador que estes usando.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

branon32

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;
}
sit tibi terra levis