我的手上有太多時間,開始想知道我是否可以編寫一個自我修改的程序。爲此,我在C中編寫了「Hello World」,然後使用十六進制編輯器在編譯的可執行文件中查找「Hello World」字符串的位置。是否有可能修改這個程序打開自己並覆蓋「Hello World」字符串?C程序可以修改其可執行文件嗎?
char* str = "Hello World\n";
int main(int argc, char* argv) {
printf(str);
FILE * file = fopen(argv, "r+");
fseek(file, 0x1000, SEEK_SET);
fputs("Goodbyewrld\n", file);
fclose(file);
return 0;
}
這是不行的,我假設有什麼東西阻止它打開自己,因爲我可以拆分到這兩個獨立的程序(一個「Hello World」和東西修改),它工作正常。
編輯:我的理解是,當程序運行時,它完全加載到內存中。因此,硬盤上的可執行文件是所有意圖和目的的副本。爲什麼它會修改自己是一個問題?
是否有解決方法?
感謝
作弊引擎ftw !! – 2010-10-10 02:58:44
哈哈,沒有。只是閒散的好奇心。 – Joel 2010-10-10 03:06:00
作弊引擎通過在程序中查找值並讓你改變它們來工作。它可以給你額外的生命在視頻遊戲等,但我不認爲你真的要欺騙引擎作爲答案。 – 2010-10-10 03:30:56