有可能分析程序的返回值吗?

Is it possible to analyze the return value of a program?

本文关键字:返回值 程序 有可能      更新时间:2023-10-16

是否可以分析main程序的返回值?

例如:

int main() {    
    //stuff
    return something;
}

是否有一种方法来检查什么值将是"something"和改变它?例如,我的程序期望return 3;

是否有一种方法来检查something是否返回3,如果这不是真的,将其更改为3,然后返回3?

当然可以,把程序包装一下。一个简单的方法是编写一个脚本:

#!/bin/sh
myprogram "$@" # pass any args we got
exit 3

它实际上是特定于操作系统的。在Posix和Linux上,请阅读waitpid(2)。请参阅这个答案(对某种程度上相关的问题),它提供了有用的参考。对于Linux,请阅读高级Linux编程(其中大部分与Posix系统相关,如Linux和MacOSX)。

您的程序可能在一些有限的环境中运行,例如在裸机上运行的监视器(或像Vxorks这样的小型实时系统)。那么main的返回码可能有不同的含义,并且可能不容易测试或更改。

注意main的返回码被称为exit(2)码——至少在Posix系统上是这样的。在Linux上,它只有一个字节。如果main返回1000,退出码将是1000&0xff,即232。

AFAIK,标准C或c++只知道EXIT_SUCCESS(应该是0)和EXIT_FAILURE(在Linux上是1)从<stdlib.h>