在不更改構建過程或包含源文件的情況下,任何人都可以想出一種方法來編譯兩段代碼,它們在編譯時會生成相同的程序集,但仍然執行不同的操作?我已經知道爲什麼這個應該是是不可能的,所以請不要麻煩解釋。確實有辦法做到這一點,主要是通過尋找方法來隱藏源代碼中的信息,而這些信息在可執行的地方以外的地方結束。聰明的方式使相同的程序集以不同的方式執行?
這是一個相當枯燥乏味的例子,它可以做到這一點:創建一段代碼,需要很長時間才能解析,但在編譯過程中得到優化(或者只是添加太多的空白,以至於磁盤I/O速度變慢彙編)。在構建過程中,讓您的程序同時生成一個exe和一個dll。根據dll和exe上創建的時間戳之間的差異,讓程序的行爲有所不同。儘管如此,這是一個非常糟糕的例子。我想知道是否有人能夠更聰明地提出任何事情。
也可以以某種方式生成不同的調試輸出,並改變代碼的運行方式,但這也有點蹩腳。
當然,如果您的代碼似乎沒有檢查自身或輸出,那麼它更令人印象深刻。如果有人看着你的代碼會感到震驚,這兩個版本的表現不一樣,這是一個很好的答案。
@Darth:我同意製作輸入是創建時間非常蹩腳。我想知道是否有更巧妙的技巧可以使用。 – Brian 2009-07-31 14:44:39