我编写了一个C程序,该程序在编译时嵌入自己的源代码,并在运行时显示它这算得上是藜吗?

问题描述

public void moveZeroes(int[] nums) {
    // [0,1,3,12]
    int j = 0;
    for (int i = 0; i < nums.length; i++) {
        if (nums[i] != 0) {
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
            j++;
        }
    }
}

维基百科说,一个木马没有收到任何输入,因此,我知道,从文件中读取自己的源代码的程序不算在内。上面的程序确实只是读取了自己的源代码并将其打印到标准输出,但这是程序本身的一部分。传统的奎因通常还会在相同的位置嵌入字符串,如果涉及特别激进的优化器,甚至可能会将整个源代码/输出嵌入其中。

该程序确实从文件中加载其源代码显示它...但是它是在编译时加载的,因此该程序仍不接受输入。那是不是奎奴呢?

解决方法

根据我收到的评论,我的理解是,不,从通常的意义上讲,它不会被视为奎因。

我认为最强的一点是@ 12431234123412341234123提出的观点:程序一旦编译,就不能说编译后的形式会输出自身,因为“自身”是二进制文件,并且会输出C源代码。因此,无论如何,编译后的二进制文件将不会成为问题。源代码也不是,因为.incbin行从文件中加载了源代码。 (无关紧要在编译时发生,因为源代码需要进行编译才能运行。)

无论如何,(正如@Raymond Chen指出的那样)它不适合奎因的精神,并且(如@ n.'pronouns'm。指出的)没有明确的“法律文书”适合。最重要的是,它取决于您使用的定义。